{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import os\n",
    "from concurrent.futures import ThreadPoolExecutor\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.svm import SVC\n",
    "from itertools import combinations,permutations\n",
    "import time\n",
    "import numpy as np\n",
    "from sklearn.metrics import accuracy_score\n",
    "import tables\n",
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "import xgboost as xgb\n",
    "from sklearn.feature_selection import SelectFromModel\n",
    "import lightgbm as lgb\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from tqdm import tqdm\n",
    "from sklearn.ensemble import GradientBoostingClassifier,RandomForestClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.metrics import roc_auc_score,roc_curve,auc\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "from sklearn.decomposition import PCA,TruncatedSVD\n",
    "from sklearn import manifold\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "import types"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def distance(m, n):\n",
    "    \"\"\"calculate Euclidean Distance\"\"\"\n",
    "    return np.sqrt(np.sum((m - n) ** 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def extract_feature(df,train):\n",
    "    pst_sk_list = [i for i in df.columns if i not in [\"ship\" , 'time', 'type']]\n",
    "    \n",
    "    #unique, mean, std, var, min, quantile0.25, median, quantile0.75, max, mode特征\n",
    "    for s in pst_sk_list:\n",
    "        t = df[s].agg({\n",
    "                        'nunique_' + s: 'nunique', \n",
    "                        'mean_' + s: 'mean', \n",
    "                        'sum_' + s: 'sum',\n",
    "                        'count_' + s: 'count',\n",
    "                        'std_' + s: 'std', \n",
    "                        'var_' + s: 'var',\n",
    "                        'skew_' + s: 'skew',\n",
    "                        'min_' + s: 'min',\n",
    "                        'quantile0.25_' + s: lambda x: x.quantile(0.25),\n",
    "                        'median_' + s: 'median',\n",
    "                        'quantile0.75_' + s: lambda x: x.quantile(0.75),\n",
    "                        'max_' + s: 'max',\n",
    "                        'mode_' + s: lambda x: np.mean(pd.Series.mode(x))}).reset_index()\n",
    "        \n",
    "        t = pd.DataFrame(t.T[1:2].values,columns=t.T[:1].values.tolist()[0])\n",
    "        t[\"ship\"]=train[\"ship\"][0]\n",
    "        train = pd.merge(train,t, on='ship',how='left')\n",
    "    \n",
    "    train[\"type\"] = df[\"type\"][0]\n",
    "\n",
    "    #构建x,y坐标交互特征\n",
    "    train['x_max_x_min'] = train['max_x'] - train['min_x']\n",
    "    train['y_max_y_min'] = train['max_y'] - train['min_y']\n",
    "    train['y_max_x_min'] = train['max_y'] - train['min_x']\n",
    "    train['x_max_y_min'] = train['max_x'] - train['min_y']\n",
    "    train['jili_xy'] = math.sqrt(pow(train['x_max_x_min'],2) + pow(train['y_max_y_min'],2))\n",
    "    train['rec_area'] = train['y_max_y_min'] * train['x_max_x_min']\n",
    "    train['slope'] = train['y_max_y_min'] / np.where(train['x_max_x_min']==0, 0.001, train['x_max_x_min'])\n",
    "    \n",
    "    #活动半径\n",
    "    min_point = np.array([train['min_x'], train['min_y']])\n",
    "    center_point = np.array([train['median_x'], train['median_y']])\n",
    "    max_point = np.array([train['max_x'], train['max_y']])\n",
    "    train['short_r'] = distance(min_point, center_point)\n",
    "    train['long_r'] = distance(max_point, center_point)\n",
    "    \n",
    "       \n",
    "    #缺失值个数比例\n",
    "    train['direction_miss_rate'] = (df['d']==0).sum() / len(df)\n",
    "    train['speed_miss_rate'] = (df['v']==0).sum() / len(df)\n",
    "    train['direct&speed_miss_rate'] = len(df[df.d==0][df.v==0]) / len(df)\n",
    "    return train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sub_k_by_key(df):\n",
    "    result_dataframe =pd.DataFrame({\"ship\":[df[\"ship\"][0]]})\n",
    "\n",
    "    pst_sk_list = [i for i in df.columns if i not in [\"ship\" , 'time', 'type']]\n",
    "    pca_data  = df[pst_sk_list].T\n",
    "    pca_transform_data = PCA(n_components=1).fit_transform(pca_data)\n",
    "    svd_transform_data = TruncatedSVD(n_components=1).fit_transform(pca_data)\n",
    "    tsne_transform_data = manifold.TSNE(n_components=1, init='pca', random_state=0).fit_transform(pca_data)\n",
    "    \n",
    "    for j,key in enumerate(pst_sk_list):\n",
    "        result_dataframe[\"pca_\"+key]=pca_transform_data[j][0]\n",
    "        result_dataframe[\"svd_\"+key]=svd_transform_data[j][0]\n",
    "        result_dataframe[\"tsne_\"+key]=tsne_transform_data[j][0]\n",
    "    \n",
    "    \"\"\"算开始 结束 和差值\"\"\"\n",
    "    sort_series = df.sort_values(by=\"time\",ascending=False)\n",
    "    for k in pst_sk_list:\n",
    "        start = sort_series.iloc[-1][k]\n",
    "        end = sort_series.iloc[0][k]\n",
    "        start = start.values[0] if type(start) is pd.core.series.Series else start\n",
    "        end = end.values[0] if type(end) is pd.core.series.Series else end\n",
    "        \n",
    "        result_dataframe[\"start_{}\".format(k)]=start\n",
    "        result_dataframe[\"end_{}\".format(k)]=end\n",
    "        result_dataframe[\"start-end_{}\".format(k)]=start - end\n",
    "        \n",
    "    return result_dataframe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  1%|▏         | 101/7000 [55:56<66:04:10, 34.48s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2    0.603960\n",
      "0    0.247525\n",
      "1    0.148515\n",
      "Name: type, dtype: float64\n",
      "(101, 2501) (269,)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEWCAYAAACe8xtsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOydeZhcZbH/P9WzJDOZbBOyDSELiQFEEAXBDWUXZBUiIrgABgKi3itekas/VIJe2QSRi4KAgIoKsogsKiDLFZRFEQgoICQhyWSyTpJZMpml+/39Ueftc05PT/dM6J7JnNTnefJ09+lzTr9daNdUfd+qEucchmEYhjEQUkO9AMMwDGP4Yc7DMAzDGDDmPAzDMIwBY87DMAzDGDDmPAzDMIwBY87DMAzDGDDmPAyjjIjItSJywVCvwzBKjVidh7EtIiJLgclAOnJ4rnNu5Vu45wHAL5xz097a6oYnInIzsMI59/+Gei3G8MciD2Nb5mjnXF3k31Y7jlIgIpVD+flvBRGpGOo1GMnCnIcx7BCR94rIX0Rko4i8EEQU/r3TRORfItIqIotFZEFwfBTwe6BBRNqCfw0icrOIfCdy/QEisiLyeqmIfE1EXgTaRaQyuO5OEVkrIktE5EsF1pq9v7+3iJwnImtEpElEjhORj4rIayLSLCJfj1z7bRG5Q0RuC77PcyLyzsj7u4nIY4EdXhaRY3I+98ci8oCItAOfA04Bzgu++73BeeeLyBvB/f8pIh+L3ONUEXlCRC4XkQ3Bdz0i8n69iNwkIiuD938bee8oEXk+WNtfRGTPfv8HNoYF5jyMYYWI7AjcD3wHqAf+C7hTRCYGp6wBjgLGAKcBV4rIu51z7cARwMqtiGQ+CRwJjAMywL3AC8COwMHAf4rIR/p5rynAyODabwLXA58C9gb2By4QkVmR848FfhN8118CvxWRKhGpCtbxIDAJ+CJwq4jsErn2ZOC7wGjgZ8CtwKXBdz86OOeN4HPHAhcCvxCRqZF77Ae8CuwAXArcKCISvPdzoBbYPVjDlQAi8i7gp8ACYAJwHfA7ERnRTxsZwwBzHsa2zG+Dv1w3Rv6q/RTwgHPuAedcxjn3EPA34KMAzrn7nXNvOOVx9Md1/7e4jh8655Y75zqA9wATnXMLnXNdzrnFqAM4qZ/36ga+65zrBn6N/ihf5Zxrdc69DPwTeGfk/L875+4Izr8CdTzvDf7VARcH63gEuA91dJ57nHNPBnbakm8xzrnfOOdWBufcBvwb2DdyypvOueudc2ngFmAqMDlwMEcAZznnNjjnugN7A5wJXOece9o5l3bO3QJ0Bms2EsKwzeEa2wXHOecezjk2A/i4iBwdOVYFPAoQpFW+BcxF/ziqBRa9xXUsz/n8BhHZGDlWAfy5n/daH/wQA3QEj6sj73egTqHXZzvnMkFKrcG/55zLRM59E41o8q07LyLyGeBcYGZwqA51aJ5Vkc/fHAQddWgk1Oyc25DntjOAz4rIFyPHqiPrNhKAOQ9juLEc+Llz7ozcN4K0yJ3AZ9C/uruDiMWnWfJtLWxHHYxnSp5zotctB5Y45962NYvfCnbyT0QkBUwDfLptJxFJRRzIdOC1yLW53zf2WkRmoFHTwcBfnXNpEXme0F6FWA7Ui8g459zGPO991zn33X7cxximWNrKGG78AjhaRD4iIhUiMjIQoqehf92OANYCPUEUcljk2tXABBEZGzn2PPDRQPydAvxnkc9/BmgNRPSaYA3vEJH3lOwbxtlbRI4Pdnr9J5r+eQp4GtiMCuBVwaaBo9FUWF+sBnaOvB6FOpS1oJsNgHf0Z1HOuSZ0A8KPRGR8sIYPBW9fD5wlIvuJMkpEjhSR0f38zsYwwJyHMaxwzi1HReSvoz96y4GvAinnXCvwJeB2YAMqGP8ucu0rwK+AxYGO0oCKvi8AS1F95LYin59GBfm9gCXAOuAGVHAuB/cAn0C/z6eB4wN9oQt1FkcEa/gR8JngO/bFjcDbvYbknPsn8H3gr6hj2QN4cgBr+zSq4byCblT4TwDn3N+AM4D/Ddb9OnDqAO5rDAOsSNAwtlFE5NvAHOfcp4Z6LYaRi0UehmEYxoAx52EYhpEAAv3tHyJyX/D6VhF5VUReEpGfBrVBJaOszkNEviRa7XuniPxVRDpF5L8i748UkWdEq4RfFpELI+/NEpGnReT1oMK2OufeJ4iIE5F9yvkdDGOocM5921JW5aOv35+gOn9JUCH/vIjsNdRr7Sf/Afwr8vpWYFdUy6oB5pfyw8odeXweOBQ4GxUyL4fQqaAC3kHol9oFOFm09cQM4Dm0MV4nWpj0ueDaahG5CRU6twTXG8Z2h4jsJCKPirYVeVlE/iPnvdeDP7Be8e+JtjxpjPwwfnTovsGQ0wkc5Jx7J7oB4nAR8YWMX3XO7RX8e37oltg/gt2GR6KbNwAICmmdU2H7GXSbd+k+s1yCuYhcC5yOtjb4qXPuykAAbEPbMoxAO6ZmUK9I8PyDQBfqPHxV7Ejgdefc20RkFepUutA6lWucc332FgIYN26cmzNnTgm/XfJob29n1KhRQ72MbZZt0T7t7e28+eabOOdwzpFOp5k7dy41NTW0t7fzxhtv0N3dza677sqSJUuYPXs2GzZsIJVKMWVKvnKWt76ebc1G/SWTyfDKK68wY8YM1q5dy9ixYxk/fnxJP6Oc9nnjjTeYMmUKmUyG1atXE/29c87xr3/9i5122onRowe2W/rvf//7OufcxHzvlXW3lYisB9ajFb4NaGuHFWgF6huoN/wE6jQqgX85594uIjsATzvnZgcO51tAk3OuQUS6Uacjwb0+EWwNzP3sM9E2CUycOHHv22+/vWzfMwm0tbVRV1dX/MTtlLdqnzVr1vC9732PDRu0IPuoo45i3rx5PPbYY9x8880sW7aMH//4x+yyyy5F7hSyfv161q9fz9y5c9m8eTMnnHACX/jCFzjyyCM5//zzaW1t5ZVXXuHmm2/m2muv5WMf+xgvvfQSNTU1fOITn9jq79IXw/F/Q+l0mgULFtDY2Mhxxx3HggULuPjii/nnP/9JVVUV7373uznjjDOorq4ufrMilMs+f/3rX3nqqaf48pe/zPPPP89tt93G9773vez7l19+OSNHjuQLX/jCgO994IEH/t05l1caKHeF+RjgAHQP+Qx0T7nPH+6MNmzrBj6EFj69TbQz6F+AahFpQwuZANIiMh5tBbE5OD4LjW56OQ/DKDWXXHIJTz31FOPGjeOmm24C4PXXX+fKK6+ko6ODKVOm8I1vfCPvX5cVFRWcffbZ2R/6BQsWsM8++zBr1iwWLlzIFVdcMeD1TJgwgQkTJgDQ0tJCJpNh7NixPPHEEyxfvpwLL7yQBQsWsHbtWl5//XV22203XnrpJe6++24efPBB5s6dy+c///kB/zWaJCoqKrjhhhtoa2vjggsuYMmSJZxxxhnU19fT3d3N97//fX71q1/x2c9+dqiX2icvvfQSf/nLX3j66afp6upi8+bNfPe73+Ub3/gGt9xyCxs3bmThwoUl/9yyaR4i8gTqnJ5EI4wn0L47vnnaMUAP2pfoaTSS6EHzdteg+bmayC2Xo11NBXVKFcHz0000N3K55JJL+NjHPsZpp50WO37XXXdx1FFHcfDBB3Psscdmj1944YXMnz+f+fPnc9JJJzF/fm9t8fDDD+eSSy6JHbv88ss544wz+OlPf8oHP/hBbrstf43hhAkTmDt3LgC1tbVMnz6ddevWMWPGDKZPn/6WvmtHRwdf//rXGTlyJLvtthvXXXcde++9N3PmzME5x9VXX80555zDqFGjOOaYY7j11lu5/vrrmTBhAj/60Y/e0mcnhbq6Ovbaay+eeeYZJkyYgIhQXV3NEUccwSuvFKq7HHrOOOMMfvOb3/DrX/+ab37zm7zrXe/iG9/4Bvfffz/PPvssF1xwAalU6X/qyxl57ICmo9ahEcIa1CH4xm13oLpHlJGoQ7sQOB51EJ71hI3euoLzKoHqfGkrtJPqbqChaVtb21v8OskmaTZau3YtPT09NDY2Zr/Xiy++yF133cXIkSOpq6ujvb09+95XvvKV7LU33ngjtbW1MXuk02lmz57N6tWryWQy2feWL1/O7NmzaWtrY7fdduPXv/41J554YsG1rV69mtdee43p06dn75NOp9m8efOA/xv09PTw7W9/m5aWFs455xyWLl1KU1MTW7Zs4cQTT8Q5x5o1a5g1axZtbW1UV1fT0aH9GA888EAWLlxYsv/uw+1/Q5s2baKiooK6ujo6Ozt55plnOOGEE1i2bBn19fU453j00UfZcccdS/K9BsM+HR0d9PT00NbWxhVXXMGkSZM4++yzAXjf+97HJz/5ySJ36D9lcR6BWL4z+gM/Fk1DvTd47TuKfgW4DI0uutC+RKBtIj4crC0qyNSjfYocmgbzMwf6auL2ZwLnUVFRsfdwy8UONsMxX12IiooKMpkM3d3d2e91++2309nZSU1NDc45RKTXd3bO8eSTT3LFFVfE3vP2aWtrI5VKZd+bNWsWL7zwAh/84Ad54IEHWLduXUE7dnR0cMkll/DFL36RSZMmxdZbW1s7oP8Gzjn+53/+h6amJk488UQOO+wwFi9ezOjRo0mlUrS0tAAa6YwaNYq6ujrWr1+fTXX9/ve/Z/bs2SX77z7c/je0evVqLr74YjKZDJlMhgMOOICDDjqIc889l40bN+KcY86cOZx77rnU1NQUv2ERBsM+73vf+3jf+94HwJ/+9KeyflZZnIdz7iwROTV4WU3YGbQZ7WK6E3ABGmnkrmMXNJUFccfwXnS4j0TuZ2yn5NMfbr75Zu6//37Gjh1LR0cHhx9+OHfddVf2mldffZWamhpGjRqFiNDT09Prvi+++CLjx49n2rT+7Wo877zzuPrqq/nZz37GBz7wAaqq+q7D6unp4Zvf/CaHHHIIH/rQh/o8r78sWrSIhx9+mDFjxvDggw/y4IMPMn/+fO6++24WLVrEl76kmxBra2s577zzmD9/Po888givv/46IsKUKVM499xz3/I6hiuzZ8/m+uuv73V8a/Sn7ZFypq38/4uq0f3U7Wj00B0cX4hqGxDXXnYBHsq5lwuuexqYl/tBIjLZObc697gxvPnUpz7FypUrqays5MEHH4y9t3z5cjZu3NhLnJ43b152J9Fjjz0Wcx6dnZ1MnKi7Djs6Oli3bl02AvE88sgjHHzwwf1e4/Tp07nsssuya3rqqafynuec49JLL2XGjBlF01r9xa97hx126PXeHnvswaOPPspJJ53ED3/4Q8aO1b6N732vzWMySkM501beIbQDcwhTUJODx/MI01XRtFUadSCOMPIQ1AGtQJ1I7p93uxAfqAOmeQyIobLRVVddxbPPPsvYsWO55hr9W+IXv/gFTz/9NB0dHey0006sXLkytrZXX32VZcuWISIx/aGrq4tUKpV97XP70Wt9iiKdTpNOp2lsbGTcuHGA2uD//u//uPLKK3vZwtunvb099pkbN25k3LhxZDIZbrrpJg477LC8dnz55Zd56KGHmDlzJqeffjoAn/nMZ+ju7ua6665j06ZNnH/++dndV/1h1qxZ3Hvvvb2ORz//hhtu6HWsXNj/zwqTNPuUM211JvqjPwptyTw1eL4Srfn4NNr3fw4qrHteQcdgRlNWaVRc/yO6TXc0oXPqAVryLMM0jwEwVPnqlpYW0uk0TU1Nsc9PpVKMHz8++370vYsvvpgvf/nLXHTRRTH9obq6mgceeIDHH3+cuXPnsueeewJk36+oqCCVSnHddddxzz33cNVVV8V0hmeeeYbp06czc+bMXutsa2vjyiuv5Pnnn2fTpk2cdtppnHrqqXR0dHDPPfcAsP/++3PcccfFIhnPfvvtx6OPPprXBoceeuhWWG7bY7hpHoNN0uxTzrSV/39QD6F4DqHQfR0aQVQE/3ykcTfwkeAchzqOCjQy+SjqRKJprkpgcVm+gTEoeGE7H5s3byZayHr99dczduxYDjzwQC666KLYuccccwyf/vSnERFOP/30rGD48Y9/nFNPPZWGhga6uro4+uij2bJFmxecccYZnH766Rx55JFFU1YXXHBB3uPz5vXKpBpG4imn88gQbqdtQ2szIHQSxxGfeibBNVNQZzA1OObX6Jxzt4rI1YRCu2cU+aMPYxiQyWR6HWtubqa1tZV0Op09tnHjRu666y5uvvnmvPepr6/PPm9oaGD58vgI7+OOO457772XkSNH4pxj48aN3HHHHdlI4fzzzy/BtzGM7YPB0DxuAy4B/oFGGinUgTyAFv15XPDeEWg3yD0JHQ6oLgKh4/AtSlLAgcAvc5YR0zzWNG96q18r0VSlKIuNaqsrOPPMM1m1ahWVlZVZAfvLX/4yS5cuxTlHZaX+z9Dng48//ngymQyPPvoozc3NWY3hmWeeobOzk5NPPhlQEbqxsZFFixYxa9Ysmpubsw5k9erVVFRUICI45+js7OTAAw/kxRdfZPHixVRWVvLVr36V9vb2fn2PpOWry4HZqDBJs89gaB77o9Xknh40DbUT8fSTT3Ptgo6vjDoOfx2EhYUptHBwB1QHySWmeUyqL9eU0GTQ1tbG+K3Mx+bbNhvt2XTiiScyZ84cLr300mzO94ADDuDjH/841dXVnHjiiaxduzb7Xl1dHdXV1YhItl6jrq6Oww47jMMO05HkF110EY888ggVFRUsXLiQU089lRdeeCG2DfXSSy/N1jR4vvWtb221fZKUry4HZqPCJM0+5UxbLUP7WS1Af+SfRaML31ZE0J1Yub/qn0L7YWUi5wOIiKSC63zqy+9RfLpcX8IoTnNzc7aa27N27Vq6u7txzrHzzjszefLk2DWnnHJK9vm0adNYu3Zt9vWKFSsAbfznU1oHH3wwhx56aDa1dMEFF/DYY49x0003sdNOWvZz5JFHlucLGobRi3I3RgS4lviWW69+ZtCiwTHEd1a9ABxM775b7cAE8leUv/XyT6Mg+aKLlpYWFi5cyJtvvsnkyZNZtmxZ9vx9992X/fbbj89//vMF73vRRRfxj3/8AwiF7ccee4x169Yxc+ZM1q1bx+bNm3noodzSn/JX0BqG0TeD4Tw+izqJp4HanPdm5Tn/PHqvywGvoX2y/Ot05Lx96L3jyjSPAVBM83jmmWfYuHEjGzduzJ533Y+vYdGiRaTTaTZu3Birf/DpIuccW7ZsYfNmzSzm5nyfe+65rC7htYl0Op2NOOrq6ujq6hryXHHS8tXlwGxUmKTZp5zOwyebH0J1igzxyGMt+SdbvQfIncIiwF7OOScivqAwuvZ8bS9N8xgAbW1t/OkPf+D+++/HOZedN+E55ZRTyGQyXHPNNXhbPvF/j7Pbbrvxgx/8gPnz5/PGG2/0yumKCCNHjqS2Vv9uiL5/2WWX0drayujRo2lpaUFEGDFiRLYeI5VKUV1dzTvf+c4hzxUnLV9dDsxGhUmafcrWkt0554cEHAocDaxCd0xF01b5JlEdDXwg8trv46wVkUrCmpDoZ71YomVvt7z55pv86le/IpPJ4JzjnnvuiWkYxx9/fK82GF1dXdkBM8cff/yAPu/nP/85Dz30EPvssw+VlZVUVIQNlKNN6KZOnRrreGsYxrZB2SKPYLsuaOTxKiqgTwYa0Z1WLji+a86ljwM/BH4XvPYOzqERjHce+dqUGFvJc889F/vLqKWlhfvuu48FCxYUvM6Pu9xxxx37POeaa66htbUV51xW+H744YdxzmX1jmnTpmXrN0z4Noxtn7I5j2C77gI08niVcJKgT2elAJ9k91XkALsD+aq1uiPrFSKOQ0TyDak3zSMP99/7Ox55+CEQYfr0GZz9hS9SXV1Nc3MzXV1ddHd3IyLZuororqh8vaKWLVvGjTfemHUC8+bN4+STT2b06NFcd911bN68mVGjRrHXXnvFejblG4m5LeeDk5avLgdmo8IkzT7ljDyeCJ4+RlgY6Av7AD6Pjp/dj/jQp6PRQsHc438jHGHr6UG/w8Y8SzDNI4e1a9dy952/Ydy4cVRUpHj936/y/N+e5qijjspOGvP6xKpVq2hubo7laH06yR8TEe655x4qKyvp6urKHhsxYgQjR45ERKisrKSqqio7dGe4krR8dTkwGxUmafYp9yRBgM8AE4HvorutvIZxB/m33V4B/Ineesy7CAdJeSoBnHNL3/pyk09zczNtbW3ZYUEbN25k6dKlAIwfPz5bmOf/eYcAuqX2b3/TgY1+S+3s2bN56KGHGDNmDCNGjGD69On85Cc/yV6z//77D+r3Mwxj8CiLYB7oHW8LXt4MnInukHKEszo+Q+g8okJ6Coh3vFP+jnbn7SHehRcR2blES088zjmamppYvnx5bBjS3nvvnY0surq6yGQyjBwZthB76aWXaG1tBdQJLVq0iG9+85s451i1ahXOua2u3jYMY/hRzvYkh6M6x0qgjrCy/LDgtEsIdYuo8L0LqotsQYv/fDX5rs65VcFW3Wi9iCN/nUdkPbCoMfmaxx47Fk7N+T5OvqYCyEYeO+20EzU1NaxYsQIRIZVK0dDQkL32tttuy3vPfPMkDMNIPuVMW00JHiegRYKOsLlhVc5nR9NXuQ5FgA4AEfGDo7zz8NHKOnqTFcwzmTSzxlbkOSVZFBPjHn/88exzX5j36quv0tbWRjqdZsyYMVRVVeGcY/369bznPe9JlMD3Vkia2FkOzEaFSZp9BmMM7RrgQeB0dKttD5qa+irwk+B1tCjwUVTfqCSMOmqCx2XoICi/O0vQdu82DKof+LQTkI08enp6qKuro62tLVuc55yjrq6O448/PlEC31shaWJnOTAbFSZp9hmMluz3AFeibUo2ozujZqBaSDfqIKIjZ28n1Dz8MRdc+4fgPtEiQetrFWHZsmWxLbFNTU2cdtppzJs3L6ZheKLFeb41emVlJV/72tcS9T90wzBKSzk1j/lodHA88MXg+UjCLrqHolrI74g7iX3QYsLcGeZjgUMirz0V6FjbAuvZfjQPL4aDRhfd3d08/fTTzJs3L+YoUqkUmUwmNjL1hz/84aCv2TCM4Uk501Yr0Agjg0YM7wEmofpFDbrrqpF4LYcAe6NRywagPvJeT/Deqsgxn77ajbAi3bNdah5jx47NVnu3t7ezZs0apkyZQltbG83Nzb2u8XnYpOVjS43Zpzhmo8IkzT6D0RixAZhJuL3Wp5mOBb6OzjcHjTS2AE3AdOKOA3Srb26dh/cIS/N8/napedTW1mYL/jZu1NrJ8ePHU1dXx5gxOl9r6tSpVFdXs2zZMqqrq7Oax/Zio63B7FMcs1FhkmafsjVGjLAcuAGdx+H1DVAt5EPBcxd5zATnR4/75zXkb6j4z9IuefjjnIsV+YH2n0qlUqxdu5aVK1dSWVnJ1KlTh2iFhmEMZwZjt9UU4DQ0SsigIvkIdMLgTYRTBUG34E5Cd2hBXNvoQqvWow7P6yKTCi0kSZqHr+Voa2vjsssuY8mSJYgI5513Hrvvvnv2vHzh8bvf/W7uuOMORo8eTWVlJZ2dnRx00EGDtnbDMJJDOZ3HUrTgbx1awDcX2JEwffUTwkLAJsD/Cfz24Jou1AF5BzISLTiM4t/bE21pEiWRmod3CpdeeikrV67MDk3yrUfq6+v5wQ9+wNlnn5295oADDqCtrY3p06dzxBFH8Oc//5lMJsMuu+zCIYccYppHPzD7FMdsVJik2aecW3XnBC9noCkr39fK/4qfCVwYvD8lcvlmtGV7dZ5bH0DYYNE3W6xAt/3mkljNo62tjWeffZZp06bFGhr679jR0ZGdxTFx4kR23jns3rJgwYK8bdaTlo8tNWaf4piNCpM0+5RF83DOnUUYFXSj0cTY4PO8U/gm8AjQSVBBHvAksL6PW89AHUdLcC/viPI5msSyePFiOjs7Wb16dbb7bVTf2LJlS7YI8Nhjjx2qZRqGkWDK2RjR3/sWtLpciDc0TKGt16sI241kgHPRFFauKP5K8H6K3jux1rAdsWzZMpxzbN68me7ubtrb27nzzjuz748cOTJb03HEEUcM1TINw0gw5SwSPBN1GJ8D5gdvRQXwzwBXEU9ZCVpUOCnnXID70NqRXKfi0Ihkac7x2DCoJOUafb2Gn/OdyWRYsmRJ9jtu2bIF0N1V1dXV/fruSbNRqTH7FMdsVJik2aecgrnXNxrRyGAGYbfckeh23Dk51/g+Vr37aGiV+lQ08vAjaH2R4P70dh6J1Tw8FRUVpNNpMpkMW7ZsyeZTKyoqEBHmzZvX7xxr0vKxpcbsUxyzUWGSZp9yOg+vR0xEI4kq1KGMCI6PonfaLNqSBMJJgQBVzrkNIpIh3s4Eeu/CSjS+waGPMIDsritPbW0thxxyCIZhGOWgnEWCPj5bA7SiDRH9DilQx9BBPA0lwDHANZH1RYdE+UfvUHzn3e2qSDDXUQB0d3dnn9fU1HDPPfck6q8cwzC2LcoZeaxHGx+OR9NQPhLxTqABjUY60d1SPpr4JNo0MXpulF6ja51zTXnOi2kea5qHT5FgbXXhmpSqqqpex5xzbymfmrR8bKkx+xTHbFSYpNmnbM7DOTdTRBxaSf5RVAivIUxF+YhiRM6l9zjnPiAitxJ3FJv9rVGtI7t2EdnBOZc7ECqmeUyqLzxlbzhRW6ub0/xAJ1Dx/K1EGknLx5Yas09xzEaFSZp9yuY8gu26AAuBe4PPeg11FjOC97x4HtU6nIg00DvCiNZ+5Hbi7asuZFhz0kknZRsdVlRUcN111wGh5uEdB0B19XZV6mIYxhBTNs0jKBQE+Dxaz1GJ7q6aHjnNx3BRRzEW7YWVm9jvFpEU8V5YntGlWPO2xtq1a0mncxsJh5rHiBEjqK6uRkTo6ekZ7OUZhrEdU87I40vB06+gTsIXCfqWIuvRnVhRMsBfgLcFr7egekgqOPfAyHnFHN+w1zwymQyNjY3Zrbc+X+pDX5+2EhEymYxpHmXE7FMcs1Fhkmafcgrmn0d3WM1GZ483oiL5MjRtVZ/n81Notfk0VBsZQXxbrs/TbEbFeH3DuaIzzIer5uEn/Y0dOzbrNHz33NGjRzN69GiWLVsGYJpHGTH7FMdsVJik2aec7Ul2BsYBd7NsK2wAACAASURBVAEnAQ+ghXyLgtPWEw53iuZm7kerzv0OrGj6anHw6P8LRB1KYnHO0dzczAsvvADAnDlzqKioYNOmTaxYsYJUKsX48eOHeJWGYWxPlLM9ySnoVtyj0LTVSWhU4TWPHtQ5PIM2TvQO4Qp0hrnHO7gqeu/MEhLuPKJaxiOPPMI73/lO6uvrmTVrFj09PaRSKbq7u9lnn32GcJWGYWxvlLvOozv4jAvRYkH/Yz8ajTYywL45192Dtl7fFe2eW0dYGLiUsB07wf0QkXrnXO6A7m1a8yhWyxGtHve8+uqr2ZzpF7/4Ra6++mp6enpoaGjgxBNPNM2jjJh9imM2KkzS7FNO5wGathqFDncah6ailqHO4yzgKWA18V5WhxJGIWMix7c45zpFJPdX1+VxHDDMNY81a3o3Cu7o6MjmTPfcc0+uv/76kn1e0vKxpcbsUxyzUWGSZp9ytieZgEYGjcCNqOaxkXB2x7WEjqOTMP10L/BinvvVikju7iyAlIgcX8J1bxN0dnb2OuaLAw3DMIaacjoPr080AP8BHIzWcPhtuAL8K3h+KeGuqga0vxXExXIHfAjVShy6jdfzu1IufFugpaX3BrJx48YNwUoMwzB6U872JNVBe5Jj0Ejib8Q76TYQFvddELl0KuokINxtlQIqnHN3ishqdDeWT3W1OucKVsg5B4saty3NY48dNY3W1dXF0UcfTW1tLXfffXf2/YkTNciqqqrCOUdPT09eh2IYhjEUlFvzAE1Dec0jRdiSZDnaqj2X96C9sCCsJneABGmrhugxYLSIvMM591LOfbKCeSaTZtbYwgL1YOOFs4ULF2aFtKiY1tHR0eualpaWsgluSRPzSo3Zpzhmo8IkzT6D4TzWAW8A7w1e+1/xNPAn4DB00uDPgvX8m951HJ2ow5lKmN6KOpAjgVznsc0Pg3rllVd48cUXSaVS9PT0xMQ0388q2vywrq6ubIJb0sS8UmP2KY7ZqDBJs0/ZNA8ReTl4OgGYhUYcvjUJaN3GcWin3V8SOrJfEOolPvKoQXdbvQj8Ps/HPVnq9Q8GX//616mpqSGTycSaHIJGGalU/D+PaR6GYWwrlDPy+DNa/LcSuAM4l3hTwyrCcbJRmoAdIq/9+V48PyTnvYxz7olCCxkKzcNrGn1x0003sWXLFkaNGpW3+eHEiROZNm1atunhunXrqK+vL9dyDcMwBkQ5BfOzRGRB8PKraFuSXdEf/EpU78gA7Whk4f/MfhWtMM8dSTsi0DwqgQ1oZfpH6Dt6GlLNo1hu809/+hMdHR0xbeMTn/gEN954I6CaRzqdJpVKkclkqK2tZd999zXNY4gw+xTHbFSYpNlnMDSPLwHN6Lbcf6BpLJ/4q0ZTVBvQiYOgTsVbOFpNXhGcJ8G5H/EfICJfc85dkvO527TmMWfOHJqammIjZffcc89sTnT8+PFUVup/noqKCo499lg+/OEPl209ScvHlhqzT3HMRoVJmn0GYxjUD4BrnHN/CTrERrfV+omA0a5+l6MzzNPBP69/ZJxzPcE9cqOSS0v+BQaBTCYTE8SjNDQ0ZKMQwzCMbY3BSFtVAleIyBU5pzShrdc7UQfhHcK/0NkdlcRTUqtEZEr0I4Lzcfl+fWNr2fY0j/XrdfhhX87DMAxjW2Yw0lYOHfD0HuLi+BTikUVP8P5EtP8VxJ3HS6ijgXjU0VttVrZpzWPDhg0AsbTViy++OGQ50aTlY0uN2ac4ZqPCJM0+g5G26gb+APwv8CPgFrRdyXp0IBSocO4dyw5oH6xc9gB2ynO8QkROdc7dnHN8WGseg03S8rGlxuxTHLNRYZJmn3L2tvI41EldhA6GOi44vgNhBBFdx1LgnMi1njpUeIewv5Xnj6Vb7uDhNQ/DMIzhRtmch3PurOBpFfAZYCZwOuEwqCZ6OwGHpqGOCl5Hf1krUI0ENFJZHHlvl1Kte7CIah6GYRjDjcHQPAR4GU1fvQ0d8DQW1Tya0WaJXvzuAd6k94Ao0CmEXgupRmeje6b3Pj0+DGooco1dXV2cf/75dHd3k06n+cAHPsApp5wCmOYx3DD7FMdsVJik2WcwNI8G1HHMCF5vQZ3H6cAZqEAuaGRRFZz/MDq2djna02oi6mDWBvfw/a5GBNe+nmcJQ655dHZ2IiLZQr+HH36Y/fffn7e//e1ZzcPvtHLOmeaxDWP2KY7ZqDBJs89gaB6gP/5+u5PvpLsQ2BN1JtGtUIuB+1AHsVNwLWg66+DIedFWJ2+UfsmlJZPJsGHDBpYsWRI7NmbMGEtdGYYx7BiMtBXo/PJRqJPwv5T/hU4V/EPOuT1o88PcQsDVkedCuMUXdC5I9P1tgq6uLpYuXUp3d3evWo7169dTUVHByJEjaW9vj6WvDMMwtnXK6TzeETx2o72rQB1DB/pjfxWqe3SiGoZvsQ5aYZ4bFY0I7hV1Kv75ijyfH9M81jSXvkiwtrpw7UhnZycNDQ00NjbS3d0NwAsvvMCHP/zhrENZu3Zt1nGY5rHtYvYpjtmoMEmzTzmdx7tzPidFPJL4D+DXxCMIQdu3R3dVeSeyEp2BnhuR9KCO6m85nx/TPCbVF674LgdVVVVUVVXF0lLLly+nrq6Oa6+9Nnvsqquu4r777uO2224b9DV6kpaPLTVmn+KYjQqTNPuURfMIxHIfbaxHf/Qrgs/zo2evJnRe0ZzNfHRnlctZX0Nw3O/KInieQmtDtjk2btxIT09PNuoAYs89O+64Y6L+R2UYRvIZDME8N5nvX/+KsLVIdB13o/pIror8AaAVTV15p9ONOqdtkjfffJPGxsbYsa6url7nzZs3Lza/3DAMY1tnMATzPwK/RVuOCKHzODF4vpyw7UgGrUA/D/gacYH9EeBzwXO/Tbcb3cqbz4EMuebR2tray1m0t7dvk3nPpOVjS43Zpzhmo8IkzT6D4Tyagecjr3sI55FXEjoOn6Z6B6qFnEG4rRd0PO2raC2Idyi1wI/76Ko75JqHiFBVVUVPT092t5WIbJMpqqTlY0uN2ac4ZqPCJM0+ZUlbRVqTrAairdijOkZ0d5V/DbAzKpr793xqay3a0uRN4jNBcoXybYbW1taY4wCoqakpcIVhGMbwoNyaxxbgZvQHP18TxNy8Tw/wS+AydBStP8cBTzjnOgkjFs+FpV1y6Zg6dSpVVfER7SNGjOjjbMMwjOFDudNWfwAOJYwioprHMmAcOpbWk0a7584mviVXgA+LyJvEZ4JAPCUWZZvUPDo7O7fJvGfS8rGlxuxTHLNRYZJmn7I4j0hfq88Bm4inp7zzqCR0HBnCqvEf+9sQdyD/gfbEitZ+OOBwEal2zuVuYxpyzaOuro7q6upYhXlLS8s2mfdMWj621Jh9imM2KkzS7FNOzcPP8RiNCuTegfi8zdfRtFYa3TUVjUj8uqL7XEcB64g7PAleRzWQbYbNmzf3akuSm8YyDMMYjpRT82iPPH8dFbtd5Ph3CLvpjiDUPzqAJ4Pn0yL3+Cs6QCoT3CfrMJxz22RjqJaWll6C+bhx44ZwRYZhGKVhMLbqLgd+hm7J/Ti6A2sX1HH9C9gr5/zJwPGE7dc9/wZWETq87NpFZIxzrqWvBTgHixpLr3nssWPhVNjEiRN7RR75igQNwzCGG+V0Hj4/MxtNUfl5HdXB8U8Dvwmee22jC9gbOCDP/T4OfJjeva0AdgWeyTmWFcwzmTSzxhYWt7eGYuJXV1cXVVVVsZYkmzZt2iZFs6SJeaXG7FMcs1FhkmafcjoP/2u9DtU9/Ova4PE6QsFcgM1o+mon4IY895uCprzSxCvPQXtn5TLkw6CihYH+eVVV1TYpmiVNzCs1Zp/imI0KkzT7lLMxoncWo1EHkvtZ56JCucc7hSpUYM+lG932W0God/ic0OI85w85pnkYhpFUyhJ5OOfOEpEz0OhgFfAEcDLx7bfXEp/14bvtrkDTUK3oDivvdM5Dq88zhCkxXzcygQLDoEzzMAzDKC3lrPPwP/q/R3/su1G9owtNT02lt3ZB8L4jbL/u2R94hd5V6Sl6i+v+/LJrHmvXruXKK69k40bNnB1++OEcc8wxgKatpk2bxurVq7O6h2kewxOzT3HMRoVJmn3KGXnMR3/ob0YdwemoU/CCuaBNE8dHjjk0ElmG7shKR9Z4IPBY8NwXFfpIZkd0V1eUQdE8Ghsb6ezsJJVKkclkuP3223n/+9/PzJkzcc5RUVERGwZVW1u7TeY9k5aPLTVmn+KYjQqTNPuUu7dVGtUvrgduApYA3vVWohXj1TnXvAI8S1gD4nkSuJ244yB4nMw2Qnt7Oy+//DKgmkdTU1MsVTVnzpyhWpphGEbJGHDkISLjgZ2ccy/24/QUcC/qQE7Pee9NYEbu7dFGh1+IvPa8iDqTbuKja9spMkmwnJpHc3Mzy5cvp6enh0wmQzqdprOzE4CGhgamTdM6x87OThobG2lvby90S8MwjGFBv5yHiDwGHBOc/3dgjYg86Zw7t8BlK9Btt2vR3VAHoc7EC+Z9aR6fAr4NnJ1zfAZa55EbqdQ459bluc+gaB5dXV1MmDAB5xyrV6tmv2rVKtra2ujo6CCdTiMipFIpqqqqaG1t3SbznknLx5Yas09xzEaFSZp9+ht5jHXOtQQ6xs+cc98SkWKRxwTUWaSBfdG2IyMJp/+1Eo8gPDsD34289lt4DwDup7fDyeeAYJA0jylTplBTU8Py5cvJZLRLSldXF3V1daTTOorE6yEA73//+7fJvGfS8rGlxuxTHLNRYZJmn/5qHpUiMhUdHXtfP6+5NXjsAb7tnKtDt+z6LbVjgsdutA7E96eqA94ePE9HjtcCLwXn+wFRACIiU/q5ppLjnGPVqlWxKvIpU3Q5PT09NDU1sWLFCpqamth999057bTThmqphmEYJaO/kcdCdBb5k865Z0VkZ7TXVJ9Eaj2qgQ+KyInAfoTV4KtRobsabXjomYOK5h5f09EOvExvh7fFObeqn9+j5Dz33HO0trbGjq1cuRKAAw44gAMOOGAIVmUYhlFe+uU8nHO/IexDhXNuMXBCoWtE5EvoD/0UoB4d/CTEq8dbgveiDuHXwO7B86hQMRWdaZ7JWXc0CokSGwZVrlxjT0/vbvAbNmwYdrnNpOVjS43Zpzhmo8IkzT79FcznokOaJjvn3iEiewLHOOe+U+AyPx52LRq1VAOfRB1GDWGleBqNKnyFeTtwF3AUcUfj01uVhDqHA6pEZLJzLrfCfFA0j/Hjx/c61tPTM+xym0nLx5Yas09xzEaFSZp9+qt5XA/8N0EvqmCb7kl9nRxUmHtNYxqwAPgs6gx8TcZX0eilEtU5PL4WpDP4PD8QqhX4CHHHAeqUonM/BpXGxsZex6L6h2EYRhLpr/Oodc7ltjzvc3pfMEnQaxuVxOsw/I/+xcBtxAv+QHdpfRktIKxCq8cB1gNnRs6LXjeaIWLMmDG9jjU0NAzBSgzDMAaP/grm60RkNsEPv4jMQycDFsK3j+1GU1Er0QihE41AhHhXXdC+VoeSX8eYg+oux+R5b2meY6Z5DICk5WNLjdmnOGajwiTNPv11HucAPwF2FZFGNLV0Sl8n5zRGvAX4Bjp29kTCKEGI77Lyfa/2Q7cDf4h4QeAS4J+oVpIbMb2ZZxmmeQyApOVjS43Zpzhmo8IkzT5FnYeIpIB9nHOHiMgoIOWcay10TbBNd0Hw8pPA4fTWJdJo3YYfQ9uC6iSt6GAov0XXV6SPCO6R6zj8+44hwDQPwzC2R4pqHs65DDpLA+dcezHHkYcN5Be0HWFqC1TjEOCXxNux+8dWtKuuA7ZErushHsEMKr53VRTTPAzDSDr9TVs9LCL/hQrc2c5+zrnmfCcHaStPLfAC8E70h/8ZNDW1AHgwz+X7oj2xfFsSz2Z/e8K2Jo5+zPNIp9Osad66xoi11YV7Yq1b17utVnd397DLbSYtH1tqzD7FMRsVJmn26a/z+ETweE7kmEP7UPUiSFudif7Qt6KTAbuDa3zrkZuJN0r0HIymrHJ/tVsIt+1Go5IU8dG0npjmMam+8NS/rWXkyN4Tczs6OoZdbjNp+dhSY/YpjtmoMEmzT38rzGe9hc8Yh4rcG9HBT17LiBb7RbkK+Ir/6Mg5i4FZkeMZ1Gn01RhxUPATBKOsWjVk3VIMwzAGhf5WmH8m33Hn3M8KXLYBbT3yHCqE703cGXiBO41GDT4VdTwaZexA3DEcB9zpl0Q8MqkNrhl08mkeO++cNyAzDMNIDP1NW70n8nwkmlp6DijkPMagjuHrweO1wB5oc8O90GJAhzqBqCNYAdxDINIHOLQK/Qnyb9X9CJHeWwFDpnk454ZdbjNp+dhSY/YpjtmoMEmzT3/TVl+MvhaRcWgDw7wEgrm/9xPEnYPfmnsoqn/8mHiE8R20mWLslmhksjuwCU1/eTJoDUgug6J51NTU9DpmmkfyMPsUx2xUmKTZZ2tnmLcT6g+9CNqT+MK9JrS1SDRNBXADcCyqhWQI53acAnya3tXngk4SBN1d1UO422rp1n2Nt05tbW2vY34MrWEYRlLpr+ZxL+GPfwqNGHLTRLn4YoeJaPTxXjTl1YNGItXoaNp0cM92YBTaORc0wojWbzQCywhrQ3y04sX4IcGKBA3D2B7pr+ZxeeR5D/Cmc25FkWs6CXdWTUQF9Ab0h34y8EVU19g/OMfvef0tWjA4P+d+bcAdwK+Ip7n62m01KJpHvq26EydOHHa5zaTlY0uN2ac4ZqPCJM0+/XUeH3XOfS16QEQuyT2Ww3pU5F4N7Ak0o9GLb8l+B+pQPBVoFLIbGpX0RNbngFnOubSI+FYk2VoP51y+Dr+meQyApOVjS43Zpzhmo8IkzT791TwOzXPsiCLXTAgevfg9HnUQPv11KJFq9YAKtPJ8T+KOTdA56r6oMIaI7Jh7bLAwzcMwjO2Rgs5DRM4WkUXALiLyYuTfEuDFIve+NXhsAm5Ho4rXCDWNh4DZea7z23EhdBQ9wb8JaNv2qN4B8I4iaykbpnkYhrE9Uixt9Uvg98D3gPMjx1v76mvVBweiUcUcwh/+JjQa8fkkX79xHOpsiJybQpshriPept07v+ixXjgHixq3TvPYY8fC6S4bBmUYxvZIQefhnNuE7nr6JICITEKF7ToRqXPOLStwrW/LfiYapfwNmEQoos8gLnZH01Ev5NwuBYxyzjmVPHoxN8+xrGCeyaSZNbaw8N0XxQQuGwa1fWD2KY7ZqDBJs09/t+oeDVyB7pZag/7w/wst2ivGJufcKhH5KJqSSqMOaAVQg27HXRTccwyqkXw15x4dhLuxcgVzBzyV53NtGNQASJqYV2rMPsUxGxUmafbpr2D+HbRO47WgSeLB5P/BzsevRORhNJoYTdjDahLacRe0bYnP/zxLqKdsRp1DDWHR4HPBo9c70oQ1JYOOaR6GYWyP9Herbrdzbr2IpEQk5Zx7VER+0M9rhSACCGhFHcWngI/Ru1J9LvA+1FlEtzL9SEQaUHFciLdl/1ehBZjmYRiGUVr66zw2ikgdmgq6VUTW0HubbYzIQKgGNILww528uH05YbQRbXb4v6iDyJ2R/kk06sgVx1NoTUkupnkMgKTlY0uN2ac4ZqPCJM0+/XUex6K6w3+iP+pjgYX9vPZN4OfAH9DCwDa0vUkFGln4/lSeR/tY1yTyb+0VVC9pyjleMs3jkksu4amnnmLcuHHcdNNNsfdmzdLASURIpVKk02nTPBKI2ac4ZqPCJM0+/e2q2y4iM4C3OeduEZFaek/664vpwDzgo8HzjuC4nywIcQH8YOD5PPfJoHpJbkt2R9hssSw0NzfT09OTV9/wLdmdc6TTuoyqqqpe5xmGYSSJ/u62OgPdcluP/vW/Izqf4+C+rols1Z2Hzi2fgRYG+rRTA/mnCc4DfkS8PUlwS/ffIpLbEkXQFih98lY1j8WLF/cZbs6ercFQRUUF6XQaEeGggw7aqs8yDMMYLvQ3bXUOsC/wNIBz7t9BzUefiMgTwdNfo8V9U9GoYRO6eypaJBiNPJai+ka0r5UDKkRkZs65nnxRUMk0j/r6elpaWujq6urlRDo6NJDyjmPixInZ64YTScvHlhqzT3HMRoVJmn366zw6nXNdvkBPRCrJ02Mqh7cFj4tQB+EjDr9VtwLduptbs3EmsDx4vRl1NCnU8Xww8jwVuWYivQdClUzzGDduHM7p1829j++qKyLU19czevRoRo4cOexym0nLx5Yas09xzEaFSZp9+lvn8biIfB2oEZFD0Vke9/Z1crDTykcmLwDnoj2pog5ncvD5ue3Vfxkcd2g1un9/C2FnXj/33F+zpp/fY6vxziOXxYsX6yJEaG1tZfny5bzyyivlXo5hGMaQ0t/I43zgc2gUsQB4AJ0E2B9OAKYROgKvZfwP8DU0sogyBnUSUwhbmYBGG/8M7pGrSE+ijNMEFy9enHdLLsCcOXMAmDlzJj4y23XXXcu1FMMwjG0C6esvagARmV6of1XBG4v0oD/0S4Gd0V1Wfk7HCDQSqUYjiipC3eI+VBfJrfNoRoX69cSLBwEmOufWRQ+IyM+B4wHq6+trb7nllq35GgCcfPLJtLZqMfyECRM4+eSTOeyww7b6ftsi6XSaioqt04W2B8w+xTEbFWY42ufoo4/+u3Nun3zvFYs8fgu8G0BE7nTOnTCAz/UpqWmoHjGTeIrqHLRWZGrOdauBu1Dn4dCIowKocM5tEZE30HYmnuZcxxFQMs0juvVWRBgxYkSicpeQvHxsqTH7FMdsVJik2aeY5hH9sd95gPf213YROqnNwMrg+fnopMHc0Kcxcq4QRiQu2KbrZ3f4BlKVIlJWdx7dIdHc3MyiRYvK+XGGYRjbPMWch+vj+UCoRqMLQdNNfurfBWin3Ny27O8AvkBYfe4LANOotuHP9+HAGHQb8aBQX1/PHnvsUfxEwzCMBFMsbfVOEWlBf7BrgucEr51zrndXQGJ9rUB3Zh2Etl6vItxJ9TNC55UmTHO9nXC2eTqyxpeIzzyPsivw15xj2TqPdDrNmua+iwRrqwsHLiNGjKCrqwvQXVednZ2J2q8NyduDXmrMPsUxGxUmafYpNgxqq9JBQXX5KWha6r3AZWi33DOBxehEwfWE23m98wAtHPTriq7vNefcd0TkW6igPpr4Vt5cYprHpPrC3XELYZqHYfYpjtmoMEmzT3/rPLYG3+m2EjgSOCv4vDnB8XGEMzkyhGmxtcQ753pt420ikkI1kPHEHUdZCytM8zAMw4hTTufhETTqiDZBBJ0k+HTwfGRkLf8g3u7d/9n/TmACYXV5NOL4R2mXHCf614JpHoZhGP0vEtwaJgSPU9Baj9yeVGcA3yKc8+H5OxqVRAdIgUYbFeQX7keh9SJRSqZ5RCMP0zy2T8w+xTEbFSZp9imn84iSb5vvjcSnCPrK83ejHXuPRqMMPzUwHcxC34Q6pqgzyvc9SqZ5RAVz0zy2T8w+xTEbFSZp9iln2urW4LERuALtrBulklDzcIQOoAHYO8/6OkX7f4yNXOPZpRQL7ovOzs7sc9M8DMMwBkfzyACrnHOT0V1SPr00mVDbiKazJhHWbfjowleaC6GT8WvPADuVZeUBpnkYhmHEKVvaKjIMqhL4oIiciEYNfvfUcuBVtH3JroQ7rP6MtjM5krA1iQCVzrmMiOROEkwBT+ZZgmkeAyBp+dhSY/YpjtmoMEmzz2BoHhVog0LfltbvnpqGNkvcGW1F4p3HVOAa4HLiQvrIYPytb3eSHRblnFua53NN8xgAScvHlhqzT3HMRoVJmn3KlraKVJlPQiOJ3K26nwZuQtuQjItcugO6syqXTPAexJ2eiMgXSrHmvrCZ5IZhGHEGQ/NoRFuUbCAucl+MzgjxbEEdxL7AHyLHeyKPy1HdxGsg/vG+cizcY0WChmEYccqZtvLdbycBJwePfh65oNMFfx4536HObBPwU+C/c9aYCe6zA+H2XdA6kRYK4Bwsauxb89hjx/6ntEwwNwzDKK/z8CmmE9BBTscBp6JdcOvQaMTng7oJJwqOAT4SPI+K4yOB29B0l38fNCLZIfiMKFnBPJNJM2ts36J4MRHLGiMaZp/imI0KkzT7lMV5BHqH72F1Ndrn6j1otPA4cCDwA+DLwRqiosJKwrbt0e24KeCzxB2HP+dQ4LWc4zYMagAkTcwrNWaf4piNCpM0+5RF83DOnUWob1QTTAIMPu/A4Ph/Eu6mSkcuXw005VlnGvhd8Lo7eO2LC0eWcPm9MM3DMAwjTjkjD3/v0cCMyNu+l9W3gI+jDQ97CB3JUuAxtEVJF6FjWANMDJ7nbn96qNB6TPMwDMMoLWVxHkGB4JlomqqO/DPMz0ZrOv4F7B45/kfgJOIjaEG3867J83GCdujNxTSPAZC0fGypMfsUx2xUmKTZZzCKBN9Ed1UdhzqQZ1HdIo1qGbvnnD8SrTgX4hHGCMIZIR4HiHMuVywH0zwGRNLysaXG7FMcs1FhkmafwajzmI7OK38XUA8cFhxPo/pGT+TcHmAR8JfIMa+dbHHO+boOf70Q10vKgmkehmEYccoZeSxDtY7VqANpRlNP0dTVZuIOrB1NYz0AfDI45t/vCrrq+ut9HqpCRL7gnPvfvhZimodhGEZpGaxhUD2o40gRrzKfTdx5jEV3VL2N3lHRaMI5HqARh1//7+iNaR4DIGn52FJj9imO2agwSbNPOZ3HrcCC4Pkyeg+EOgfdrnt4zvEd0NTWcznr24xWqafQXVhbUH2kGm3vviznPqZ5DICk5WNLjdmnOGajwiTNPoOheTShfa1aCfUKgHuAg4Pn0eMrnXOL0K28mwkjjY1oSgtUSB9D2Il319IvO8Q0D8MwjDiDNQzqd2j/qahmsQatz/A9rTw7ichk4Ezio2Z3CARziOsmkH+ueVkwzcMwDGNwhkGl0ELA9WjbEZ9umozO9Mh1BB3AJ1CR3b/n4xFSxwAAE31JREFU0MjDP++P84gNg3oruUbTPAyzT3HMRoVJmn0GaxjURGDP4LWvGF+BCuCjctbRiaarNqGpqRThKFoIhfJuwjqQ5Xk+1zSPAZC0fGypMfsUx2xUmKTZZzCGQXWjA5+85uGdwI7AOnQnVmtwLAPcizoOvzvLM1lEGiLHogWEU0q9/iimeRiGYcQZDM2jAW23PiLn8z4PLEaHRY0OjgnwV2C/PPdJo4WG+dacr21JWTDNwzAMo7xpq38Gj39HI4/qnPd/hDqL6Bp60CjiQ3nul0abJuYj39jamOaxprnvIsHa6r5rQMA0D8Ps0x/MRoVJmn3K6TwuDB73QWswGtFU1RpULD+d3oOdXnfO3Soii4AXcu5XQSicR2eeZwhnh0SJaR6T6vtfRZ6LaR6G2ac4ZqPCJM0+ZUlbBXrHqOBlO/AqoUZRHzxeBBySc+muInI52t/Kj6z1u6wq0QjGe4Gu4DEF/LuU68/FNA/DMIw45RwG1Rm8HIW2G/Fjab0T+V7wGN12K8BRwAcIa0J8lLEejTL8+dE02JJSrT0f0b8WTPMwDMMYnK26fbGZsLlhT2QtU4CX0fTWpMj5/wBeIX+dx3H0TnOVTPOIRh6meWyfmH2KYzYqTNLsU07n4SOMbnS3FWjk0I5GI9/pYx2vA/9LODUQVCx/L+pkOomPnXXovJBcSqZ5RAVz0zy2T8w+xTEbFSZp9innVt2qyGMPGi2k0G25KeBktNq8M+e6O4H7gfMJa0IqUL3jy8GxHuJzQD5a+uWHdHaGSzTNwzAMo7yCub93BzArz2k3E3bFjbYXqQDmAhcTT0+lgAPQKKaS0HkIYfv3smCah2EYRpxyzjA/BZ1fvhH4DdqvajShZlFDfCaH5yNoVPL/CKMV33X3buBQ1MFEK8zz7bYyzWMAJC0fW2rMPsUxGxUmafYZDMF8OjA/8tpHE98GbkQdQzQCehKNKlKRc/37P0V3adUTiu3dwB/zfK5pHgMgafnYUmP2KY7ZqDBJs085NY/1weNq4FniMzsAvhE8dhJPW90SXANhrYcDcM71oM4iSmWeYyUlWiRoGIZhlNd5NASP49FZHh057wsqmFcT1zZq0bSVEDocARCRWrTuI03ocAR4f4nXHsOKBA3DMOKUM23VieoSq9EWJR6fpjoV2Be4PPJeB6qPTA5e54oRk9AGi/4+fpBUAwVwDhY19q157LFj/1NaJpgbhmGUdxjUaBHx4vjfCEfO+mjnIXREbZrQSdSg226PB76bc8sMYSoseh/QCCaXrGCeyaSZNbZvUbyYiGWNEQ2zT3HMRoVJmn0GQzA/H3UIvjiwC01VNaGFgLm/6i+gwjiEUwcBUs65VpFshitaaR6t+fDYMKgBkDQxr9SYfYpjNipM0uwzGMOgfgq8m9BJpCOPf0CdSTpy6Z/QNiQQryTPBJpHPsoqQpjmYRiGEWcwZpifjqahdg3e8q1KpqGRR26R4HpCXSNKCzCbMM0VFdk3FF6LaR6GYRilpGzOIyfyeAPdTltNKJivIWyv7h2BQ1uQ/D7PLTPOuUUispF4RblDd2jlYprHAEhaPrbUmH2KYzYqTNLsMxiRx6HoPI8ZwB1olfl4dEdV7nRBAf6LcDLgerQgUIBxIjIe3aobHQgl6K6txTn3Ms1jACQtH1tqzD7FMRsVJmn2GQzN4wbgFOfcs8TTUxDunmqNHNsf1UIgjDC8OL4bmrLyEYsXyl8t0bLzYpqHYRhGnMGYYd4InCIiVxB3HusII4zRkeNziO/A8imtDOokOgk1Eb/+5YUWYpqHYRhGaSmn8/g8+oM/E1hKOMN8A+o0diD/FttmoI3eQ58a0a27uYOgCM7PxTSPAZC0fGypMfsUx2xUmKTZpyzOI0hZ7Yymxe4HrgWeRh2CjzLWott0Z6FiuhcWXkOr0g8g3hxxi3OuXUS6g+N+7WngHWghYhTTPAZA0vKxpcbsUxyzUWGSZp/BmGF+MHAY2oZkCRpBgG7TnRk8j4YFTYQjaqNRxjgRmYg6mugAqRQa2ZQN0zwMwzDilDNttR7dQluNOpDDUYfgdY9VaE+qSuJO7EPARcS1DdCtvRvQGSHRdW92zq0rw/rzYpqHYRhG+duTCLAT2pYkgzqPLYSDoBYDbyMeYaxBCwh9K3b/3gznXI+ItKLbdP3xfBoI5AyDeiu5RtM8DLNPccxGhUmafcrpPCagP+wCbEIjkHpCkfws4OfB+z2Eaaqp6I/+SMLoI406INDIw+OAlIhMds6tJo5pHgMgafnYUmP2KY7ZqDBJs08553lEt9O+jbCozwvmM9EW6xC2VwfVRD4aPPdFhFHhvIp4tDESeE+pFp0P0zwMwzDilNN5+M64fndU7iTBfwN/DZ5XR9ayGdg9eB4d+ISI1BFvv+6dSEtpllwc0zwMwzAGpyW75zU0jeQHOF1PuD13E2HV+F7OufVB6/Woc3No6iraaddTcJ6HaR7FSVo+ttSYfYpjNipM0uwzGM5jNXA38G10G65DHYAQpqXGBI+dhNpGPtbQu3gQYD7wTM4x0zwGQNLysaXG7FMcs1FhkmafcqatPJOAL6FOZARh5NAD/JG4MxgBNInIycHxaD1HD1qVnuu6HdbbyjAMY1Apm/MICgVBazOeJUxRefwuq9hl6AzznYPX0TqPdrQf1p+J98gS4C8lWHKfRP9aMM3DMAxjcOZ5dAKPooOc6iOnVACfoXcK6nbgxDzHx6Bt3D9IWDPiB0Plc4IxzWNNc9+NEWur++57BfHIwzSP7ROzT3HMRoVJmn0GQ/PwP/TRNuqVaCFgvmjkGuAX5NE2nHOrRGQUYTsT/xhNb3limsek+v53zs0lKpib5rF9YvYpjtmoMEmzz2CkrVLAV9Af+gyhw2oi/y6pl9BmiT6t1R0cbxPdguUrz6PkDoIqKZ2doW8yzcMwDGNwBPMvAPeiA58cYb3H9D7On4F2yQV1ND46GY06lNyGiZC/tXvJMM3DMAwjzmBoHt8Hfg28HXgc7YC7EK0kbwLeje6gGos6lx+iWgjkpK6ccxkR6SGe7soAu9J7q65pHgMgafnYUmP2KY7ZqDBJs89gzDCvQp3BTqhong5OmYQ6jDfRNBWoo/g34S4rn6YSwoilgrhT6SF/2so0jwGQtHxsqTH7FMdsVJik2Wcw0lafBY5CW7R3E5/dMQrdlhtNQ10CPBh5nX1PRKYTOhRPRblbskeLBA3DMIwyOo9I2uoh4Jfo/I4qwmFQq9FoIrfn1atoTQfEnUQKrRnxzz0VIjK1RMvOixUJGoZhxBmMtNWhqKbxO+AFwu66vqNuingaah+0piND3El0OudaRaQZbffuSaOz0ZtyllAyzSPK+PHjmTt3bqJyl5C8fGypMfsUx2xUmKTZZzAE88fRdFU1Wtvhd0adDtwQrCGattobeJ2wE693IP6cdrTY0Kev+vIKpnkMgKTlY0uN2ac4ZqPCJM0+5dQ8/hk8Ph0870HrOnzdxncIHUJ0nkcH8L6c9TmgSkQq0Ygl6mzGEKbCyoJpHoZhGHHK6TwuCx73A/YCmtFdVD7aOYvQYUSHPVWgs8890XNq6d2SvexV8qZ5GIZhxCnLD2+QsvLOYBMaebw3OOY/sxvtefXRnMvT6Hbdt0dvGTx+sI+P3JPemkcW52BRY9+axx479j+lZUWChmEYZXIegVh+Crq7agPwB+Bl4NNopfnE4FjuTisIu+d6orUeueNmvVNpznOfrGCeyaSZNbZvUbyYiGXDoAyzT3HMRoVJmn0Ga5KgACehKSdfADgP+AFaIJhGd2SNC153Bed0BOf79Fo0neVxwIo8x20Y1ABImphXasw+xTEbFSZp9imn5rE+eDzLObcQuAKNOjz3EIrf0a67VwJLguc1kTW2AP9A0109xGtA2ikjpnkYhmHEGZTIQ0T2AL5JfJfUcjR9Rc7xc9Boo5P4MKgXgL8Srjm6U2tvVD/Ji2kehmEYpaXczsOno3y7EZ+OqkZ7XeV2xwVtZ/J9tA9WlD3QCCP3GgHyhQKmeQyApOVjS43Zpzhmo8IkzT7lrDCfGXTAXQfcD5yARhOjUefhiwVTxJsd7gO8RjjTwwXnVBOmwqIV6d199LYyzWMAJC0fW2rMPsUxGxUmafYpd2PETcB9wBRU7J6M6hig6abNwfMthDuvXkD1jRTqYLJrdM55nSMafYwQkTHlWLzHNA/DMIw45U5brQUOQdNVM4DjgIPQmo816O6q9cAOhE7i+4QRRrS0u0lEDo28zrYucc61FFrEW9U8dt99d15++WW6urpM8zAMw6D8va12Bn4P/NQ5d6WIHAnciTqPc4Gf0rti/Drgw2jUIcE/3zxxZuS8bEQiIpOdc6tz7lMyzWP06NHoBFzTPLZXzD7FMRsVJmn2KXdX3cOBAwvM29gVFbu9cwD4JPAiGq1UR84d5Zy7XkQuQdNdUwhng0xDW7xHKZnmUVlZSSqlvso0j+0Ts09xzEaFSZp9BmMYVF+0AB9BHVgX2km3GzgQjU6iekcGeCx4/nN0F5ev7egknE5YFl566SW2bNkCmObx/9u7u1C5qjOM4/+nidYvrI0NNXisiZhe5MJqUSmYhqAoaZWqtIhf1AvB0pZioVptKTRWvJCAHxfid4hV0YpIDFJINUYigbTRJFqtSK3RoqaJoSqxDX4+vVhrONMxnsOcZM4+Z8/zg3D2rNmZrHnJzHv22mu9KyICQKP3oAfw4tJrwImdKw9JSylTd5dRhq5up9SlgtFZVQ9TKvEuY/Tq41NKpd2NlDUdT1B2IdxZf46Mdd9D0i7KJlMTNY9SvXcmJcG9xf+XUGmDr9C+97QvJT7jS4zGNh3jc7Tt2Xt6YrLKk/R6HfgHsAR4hvLF3KmaeyVwC/BL4IratqP+PQG3UhYPbqN8iW8d74Y58LLtEyfaWUkPAKdRFjXuAK61ffdEX28qkvTM3sSo7RKf8SVGY2tbfCZrhfkRjCaJTylXHx/WK5KRes5i4I/1uX9SriheAm6jzMB6tau/uyh1r94CfjIZ74EyNPbxuGdFRAyBgSYP23O7Ho6Mc+5TkjpXGNcCKyjbzf4GuMr2TkkXU/YGebGedwxlCvA7DJDtCwb5+hER001Tw1Z71JNsztjD8/cB903gpe+YaJ+GSGI0tsRnfInR2FoVn4HeMI+IiHZqcqpuRERMU0keERHRt9YnD0lLJL0s6RVJVzfdn6lA0nJJOyS90NU2S9Ljkv5ef365yT42SdJRktZK+pukFyVdXtsTI0DSAZL+Ium5Gp9ravs8SX+un7U/SNp/vNdqM0kzJG2W9Fh93Kr4tDp5SJpBWTPyHWABcIGkBc32akpYQVlj0+1qYI3t+cCa+nhYfQz8wvYCymLWn9b/N4lR8QFwqu1vUGY/LpH0LeB64Ebbx1JmQF7aYB+ngsspyw06WhWfVicP4GTgFduv2v4QeBA4u+E+Nc72OuDfPc1nA/fU43soFZCHku1ttjfV412UL4AjSYyAsjWC7U6Fv/3qH1MqZj9c24c2PgCSRoAzgbvqY9Gy+LQ9eRxJ2e62443aFp/1Vdvb6vG/KHuvDD1Jc4ETKCVzEqOqDslsoVRceJxSMeJd252FtMP+WbuJUiWjs0/R4bQsPm1PHjEBddOtoZ/DLekQSpHOn/eWwBn2GNn+xPbxlMW/J1MqZAcg6Sxgh+1nm+7LIE2pRYID8CZlr/SOkdoWn7Vd0hzb2yTNYbSe2FCStB8lcdxv+5HanBj1sP2upLWUwqWHSZpZf7se5s/aKcD3JH2Xsl/RocDNtCw+bb/y2AjMr7Mc9gfOB1Y13KepahVwST2+BHi0wb40qo5P3w28ZPuGrqcSI0DSbEmH1eMDgdMp94XWAj+opw1tfGz/yvZIrZhxPvCk7YtoWXxav8K8Zv+bKBtHLbd9XcNdalytEryYUiJ6O/BbYCXwEPA1StXj82z33lQfCpIWUjYT+yujY9a/ptz3GPoYSTqOcsN3BuUX0Ids/07SMZRJKbOAzcDFtj9orqfNqwVfr7B9Vtvi0/rkERER+17bh60iImIAkjwiIqJvSR4REdG3JI+IiOhbkkdERPSt7YsEIwZK0ieUKb0d59h+raHuREyaTNWN2AuS3rd9yCT+ezO76iNFNCbDVhEDJGmOpHWStkh6QdK3a/sSSZvqnhhratssSSslPS9pQ12Mh6Slku6VtB64txYlXCZpYz33Rw2+xRhSGbaK2DsH1uqyAFttn9vz/IXAatvX1f1lDpI0G7gTWGR7q6RZ9dxrgM22z5F0KvB7yn4ZUPajWWh7t6TLgPdsnyTpi8B6SX+yvXWQbzSiW5JHxN7ZXavLfp6NwPJaaHGl7S21ZMW6zpd9V4mThcD3a9uTkg6XdGh9bpXt3fX4DOA4SZ06SV8C5gNJHjFpkjwiBsj2OkmLKBsDrZB0A2UXuX79p+tYwM9sr94XfYyYiNzziBggSUcD223fSdlV7pvABmCRpHn1nM6w1dPARbVtMbCzdx+RajXw43o1g6SvSzp4oG8kokeuPCIGazFwpaSPgPeBH9p+u963eETSFyj7gpwOLKUMcT0P/JfR8u+97gLmAptq+fi3meZbmsb0k6m6ERHRtwxbRURE35I8IiKib0keERHRtySPiIjoW5JHRET0LckjIiL6luQRERF9+x9+itiUM7nD0wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 获取重要特征的列\n",
    "feature_importance_tongjitez='data/feature_importance_tongjitez.csv'\n",
    "if os.path.exists(feature_importance_tongjitez):\n",
    "    import_columns = pd.read_csv(feature_importance_tongjitez,header=None)[0].values\n",
    "else:\n",
    "    filenummber = 100 #总共使用多少个文件来做特征提取\n",
    "    \n",
    "    dirpath=\"data/train\"\n",
    "    originpath=\"data/hy_round1_train_20200102\"\n",
    "    dirpathlist = os.listdir(dirpath)\n",
    "    originpathlist = os.listdir(originpath)\n",
    "    for index,originname in enumerate(tqdm(originpathlist,total=len(originpathlist))):\n",
    "        if index <= filenummber:\n",
    "            for i,dirname in enumerate(dirpathlist):\n",
    "                dfpath = os.path.join(dirpath,dirname,originname)\n",
    "                dftmp = pd.read_csv(dfpath)\n",
    "                if i ==0:\n",
    "                    df = dftmp\n",
    "                else:\n",
    "                    df= pd.concat([df, dftmp],axis=1)\n",
    "\n",
    "            dfsubpca = sub_k_by_key(df)\n",
    "            extractdf = extract_feature(df,dfsubpca)\n",
    "            if index == 0:\n",
    "                resultdf = extractdf\n",
    "            else:\n",
    "                resultdf = resultdf.append(extractdf,ignore_index=True)\n",
    "        else:\n",
    "            break\n",
    "\n",
    "    X_train = resultdf.drop([\"ship\",'type'], axis=1)\n",
    "    y_train = resultdf[\"type\"]\n",
    "    print(y_train.value_counts(1))\n",
    "\n",
    "    model = xgb.XGBClassifier()\n",
    "    model.fit(X_train.values,y_train)\n",
    "\n",
    "    import_columns = X_train.columns[np.where(model.feature_importances_ != 0)]\n",
    "    print(X_train.shape,import_columns.shape)\n",
    "    #X_train[import_columns]\n",
    "\n",
    "    # 变量重要性排序可视化\n",
    "    xgb.plot_importance(model)\n",
    "    plt.show()\n",
    "    \n",
    "    import_columns = np.append(import_columns,[\"ship\",\"type\"])\n",
    "    pd.DataFrame(import_columns).to_csv(feature_importance_tongjitez,index=False, header=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 根据目录获取文件夹中所有csv的内容\n",
    "def get_data_by_dir(dirpath,originpath,save_file_path):\n",
    "    dirpathlist = os.listdir(dirpath)\n",
    "    originpathlist = os.listdir(originpath)\n",
    "    for index,originname in enumerate(tqdm(originpathlist,total=len(originpathlist))):\n",
    "        for i,dirname in enumerate(dirpathlist):\n",
    "            dfpath = os.path.join(dirpath,dirname,originname)\n",
    "            dftmp = pd.read_csv(dfpath)\n",
    "            if i ==0:\n",
    "                df = dftmp\n",
    "            else:\n",
    "                df= pd.concat([df, dftmp],axis=1)\n",
    "                \n",
    "        dfsubpca = sub_k_by_key(df)\n",
    "        extractdf = extract_feature(df,dfsubpca)\n",
    "        \n",
    "        extractdf = extractdf[import_columns]\n",
    "        if index == 0:\n",
    "            resultdf = extractdf\n",
    "        else:\n",
    "            resultdf = resultdf.append(extractdf,ignore_index=True)\n",
    "    resultdf.to_csv(save_file_path,index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "  0%|          | 0/7000 [00:00<?, ?it/s]\u001b[A\n",
      "  0%|          | 1/7000 [00:32<63:23:34, 32.61s/it]\u001b[A\n",
      "  0%|          | 2/7000 [01:06<64:24:24, 33.13s/it]\u001b[A\n",
      "  0%|          | 3/7000 [01:40<64:29:00, 33.18s/it]\u001b[A\n",
      "  0%|          | 4/7000 [02:12<64:07:26, 33.00s/it]\u001b[A\n",
      "  0%|          | 5/7000 [02:46<64:29:44, 33.19s/it]\u001b[A\n",
      "  0%|          | 6/7000 [03:20<65:03:53, 33.49s/it]\u001b[A\n",
      "  0%|          | 7/7000 [03:54<65:08:23, 33.53s/it]\u001b[A\n",
      "  0%|          | 8/7000 [04:27<64:52:12, 33.40s/it]\u001b[A\n",
      "  0%|          | 9/7000 [04:59<64:20:12, 33.13s/it]\u001b[A\n",
      "  0%|          | 10/7000 [05:32<64:13:30, 33.08s/it]\u001b[A\n",
      "  0%|          | 11/7000 [06:04<63:14:20, 32.57s/it]\u001b[A\n",
      "  0%|          | 12/7000 [06:37<63:22:51, 32.65s/it]\u001b[A\n",
      "  0%|          | 13/7000 [07:09<63:25:51, 32.68s/it]\u001b[A\n",
      "  0%|          | 14/7000 [07:41<63:00:51, 32.47s/it]\u001b[A\n",
      "  0%|          | 15/7000 [08:14<62:59:41, 32.47s/it]\u001b[A\n",
      "  0%|          | 16/7000 [08:46<62:58:26, 32.46s/it]\u001b[A\n",
      "  0%|          | 17/7000 [09:19<63:15:51, 32.62s/it]\u001b[A\n",
      "  0%|          | 18/7000 [09:51<63:03:33, 32.51s/it]\u001b[A\n",
      "  0%|          | 19/7000 [10:24<63:06:40, 32.55s/it]\u001b[A\n",
      "  0%|          | 20/7000 [10:58<63:59:11, 33.00s/it]\u001b[A\n",
      "  0%|          | 21/7000 [11:31<63:45:55, 32.89s/it]\u001b[A\n",
      "  0%|          | 22/7000 [12:03<63:23:27, 32.70s/it]\u001b[A\n",
      "  0%|          | 23/7000 [12:35<63:01:10, 32.52s/it]\u001b[A\n",
      "  0%|          | 24/7000 [13:07<62:33:34, 32.28s/it]\u001b[A\n",
      "  0%|          | 25/7000 [13:37<61:02:06, 31.50s/it]\u001b[A\n",
      "  0%|          | 26/7000 [14:07<60:16:38, 31.12s/it]\u001b[A\n",
      "  0%|          | 27/7000 [14:35<58:44:41, 30.33s/it]\u001b[A\n",
      "  0%|          | 28/7000 [15:03<57:07:48, 29.50s/it]\u001b[A\n",
      "  0%|          | 29/7000 [15:29<55:14:09, 28.53s/it]\u001b[A\n",
      "  0%|          | 30/7000 [15:42<46:13:55, 23.88s/it]\u001b[A\n",
      "  0%|          | 31/7000 [15:55<39:39:32, 20.49s/it]\u001b[A\n",
      "  0%|          | 32/7000 [16:23<44:29:14, 22.98s/it]\u001b[A\n",
      "  0%|          | 33/7000 [16:53<48:14:04, 24.92s/it]\u001b[A\n",
      "  0%|          | 34/7000 [17:21<49:56:51, 25.81s/it]\u001b[A\n",
      "  0%|          | 35/7000 [17:50<51:41:04, 26.71s/it]\u001b[A\n",
      "  1%|          | 36/7000 [18:15<50:53:21, 26.31s/it]\u001b[A\n",
      "  1%|          | 37/7000 [18:45<53:04:17, 27.44s/it]\u001b[A\n",
      "  1%|          | 38/7000 [19:15<54:14:38, 28.05s/it]\u001b[A\n",
      "  1%|          | 39/7000 [19:43<54:11:41, 28.03s/it]\u001b[A\n",
      "  1%|          | 40/7000 [20:10<53:57:20, 27.91s/it]\u001b[A\n",
      "  1%|          | 41/7000 [20:39<54:14:05, 28.06s/it]\u001b[A\n",
      "  1%|          | 42/7000 [21:06<53:47:31, 27.83s/it]\u001b[A\n",
      "  1%|          | 43/7000 [21:35<54:22:35, 28.14s/it]\u001b[A\n",
      "  1%|          | 44/7000 [22:03<54:24:00, 28.15s/it]\u001b[A\n",
      "  1%|          | 45/7000 [22:32<54:51:54, 28.40s/it]\u001b[A\n",
      "  1%|          | 46/7000 [23:00<54:40:05, 28.30s/it]\u001b[A\n",
      "  1%|          | 47/7000 [23:28<54:41:28, 28.32s/it]\u001b[A\n",
      "  1%|          | 48/7000 [23:56<54:19:47, 28.13s/it]\u001b[A\n",
      "  1%|          | 49/7000 [24:24<54:27:59, 28.21s/it]\u001b[A\n",
      "  1%|          | 50/7000 [24:53<54:52:06, 28.42s/it]\u001b[A\n",
      "  1%|          | 51/7000 [25:21<54:26:40, 28.21s/it]\u001b[A\n",
      "  1%|          | 52/7000 [25:49<54:27:36, 28.22s/it]\u001b[A\n",
      "  1%|          | 53/7000 [26:18<54:45:51, 28.38s/it]\u001b[A\n",
      "  1%|          | 54/7000 [26:46<54:26:01, 28.21s/it]\u001b[A\n",
      "  1%|          | 55/7000 [27:14<54:25:54, 28.22s/it]\u001b[A\n",
      "  1%|          | 56/7000 [27:41<53:44:46, 27.86s/it]\u001b[A\n",
      "  1%|          | 57/7000 [28:09<53:36:25, 27.80s/it]\u001b[A\n",
      "  1%|          | 58/7000 [28:37<54:03:32, 28.03s/it]\u001b[A\n",
      "  1%|          | 59/7000 [29:06<54:28:39, 28.26s/it]\u001b[A\n",
      "  1%|          | 60/7000 [29:35<54:40:28, 28.36s/it]\u001b[A\n",
      "  1%|          | 61/7000 [30:00<53:04:58, 27.54s/it]\u001b[A\n",
      "  1%|          | 62/7000 [30:21<49:21:32, 25.61s/it]\u001b[A\n",
      "  1%|          | 63/7000 [30:51<51:28:23, 26.71s/it]\u001b[A\n",
      "  1%|          | 64/7000 [31:19<52:12:03, 27.09s/it]\u001b[A\n",
      "  1%|          | 65/7000 [31:47<52:37:52, 27.32s/it]\u001b[A\n",
      "  1%|          | 66/7000 [32:14<52:57:13, 27.49s/it]\u001b[A\n",
      "  1%|          | 67/7000 [32:42<53:09:50, 27.61s/it]\u001b[A\n",
      "  1%|          | 68/7000 [33:01<48:04:29, 24.97s/it]\u001b[A\n",
      "  1%|          | 69/7000 [33:33<51:49:18, 26.92s/it]\u001b[A\n",
      "  1%|          | 70/7000 [34:02<53:26:41, 27.76s/it]\u001b[A\n",
      "  1%|          | 71/7000 [34:25<50:41:19, 26.34s/it]\u001b[A\n",
      "  1%|          | 72/7000 [34:41<44:42:08, 23.23s/it]\u001b[A\n",
      "  1%|          | 73/7000 [35:07<45:56:53, 23.88s/it]\u001b[A\n",
      "  1%|          | 74/7000 [35:20<39:35:39, 20.58s/it]\u001b[A\n",
      "  1%|          | 75/7000 [35:47<43:44:06, 22.74s/it]\u001b[A\n",
      "  1%|          | 76/7000 [36:19<48:34:08, 25.25s/it]\u001b[A\n",
      "  1%|          | 77/7000 [36:51<52:28:51, 27.29s/it]\u001b[A\n",
      "  1%|          | 78/7000 [37:15<50:59:04, 26.52s/it]\u001b[A\n",
      "  1%|          | 79/7000 [37:44<52:23:04, 27.25s/it]\u001b[A\n",
      "  1%|          | 80/7000 [38:14<53:58:03, 28.08s/it]\u001b[A\n",
      "  1%|          | 81/7000 [38:46<56:05:53, 29.19s/it]\u001b[A\n",
      "  1%|          | 82/7000 [39:16<56:32:35, 29.42s/it]\u001b[A\n",
      "  1%|          | 83/7000 [39:46<56:55:43, 29.63s/it]\u001b[A\n",
      "  1%|          | 84/7000 [40:17<57:37:26, 30.00s/it]\u001b[A\n",
      "  1%|          | 85/7000 [40:49<58:38:43, 30.53s/it]\u001b[A\n",
      "  1%|          | 86/7000 [41:20<59:08:02, 30.79s/it]\u001b[A\n",
      "  1%|          | 87/7000 [41:51<58:54:48, 30.68s/it]\u001b[A\n",
      "  1%|▏         | 88/7000 [42:22<59:12:50, 30.84s/it]\u001b[A\n",
      "  1%|▏         | 89/7000 [42:52<58:34:57, 30.52s/it]\u001b[A\n",
      "  1%|▏         | 90/7000 [43:20<57:39:46, 30.04s/it]\u001b[A\n",
      "  1%|▏         | 91/7000 [43:46<54:59:16, 28.65s/it]\u001b[A\n",
      "  1%|▏         | 92/7000 [44:15<55:06:18, 28.72s/it]\u001b[A\n",
      "  1%|▏         | 93/7000 [44:45<56:03:55, 29.22s/it]\u001b[A\n",
      "  1%|▏         | 94/7000 [45:16<56:47:39, 29.61s/it]\u001b[A\n",
      "  1%|▏         | 95/7000 [45:47<57:42:51, 30.09s/it]\u001b[A\n",
      "  1%|▏         | 96/7000 [46:17<57:50:40, 30.16s/it]\u001b[A\n",
      "  1%|▏         | 97/7000 [46:47<57:26:09, 29.95s/it]\u001b[A\n",
      "  1%|▏         | 98/7000 [47:16<56:51:18, 29.65s/it]\u001b[A\n",
      "  1%|▏         | 99/7000 [47:45<56:56:09, 29.70s/it]\u001b[A\n",
      "  1%|▏         | 100/7000 [48:15<57:06:43, 29.80s/it]\u001b[A\n",
      "  1%|▏         | 101/7000 [48:46<57:38:24, 30.08s/it]\u001b[A\n",
      "  1%|▏         | 102/7000 [49:18<58:44:15, 30.65s/it]\u001b[A\n",
      "  1%|▏         | 103/7000 [49:52<60:23:24, 31.52s/it]\u001b[A\n",
      "  1%|▏         | 104/7000 [50:24<61:04:51, 31.89s/it]\u001b[A\n",
      "  2%|▏         | 105/7000 [50:58<61:54:11, 32.32s/it]\u001b[A\n",
      "  2%|▏         | 106/7000 [51:31<62:29:46, 32.64s/it]\u001b[A\n",
      "  2%|▏         | 107/7000 [52:05<63:04:31, 32.94s/it]\u001b[A\n",
      "  2%|▏         | 108/7000 [52:38<63:07:24, 32.97s/it]\u001b[A\n",
      "  2%|▏         | 109/7000 [53:11<63:00:51, 32.92s/it]\u001b[A\n",
      "  2%|▏         | 110/7000 [53:42<62:17:44, 32.55s/it]\u001b[A\n",
      "  2%|▏         | 111/7000 [54:15<62:17:18, 32.55s/it]\u001b[A\n",
      "  2%|▏         | 112/7000 [54:47<62:16:48, 32.55s/it]\u001b[A\n",
      "  2%|▏         | 113/7000 [55:20<62:07:13, 32.47s/it]\u001b[A\n",
      "  2%|▏         | 114/7000 [55:52<61:57:31, 32.39s/it]\u001b[A\n",
      "  2%|▏         | 115/7000 [56:25<62:19:23, 32.59s/it]\u001b[A\n",
      "  2%|▏         | 116/7000 [56:57<62:00:49, 32.43s/it]\u001b[A\n",
      "  2%|▏         | 117/7000 [57:29<62:00:16, 32.43s/it]\u001b[A\n",
      "  2%|▏         | 118/7000 [58:01<61:37:11, 32.23s/it]\u001b[A\n",
      "  2%|▏         | 119/7000 [58:33<61:15:50, 32.05s/it]\u001b[A\n",
      "  2%|▏         | 120/7000 [59:06<61:40:17, 32.27s/it]\u001b[A\n",
      "  2%|▏         | 121/7000 [59:37<61:03:14, 31.95s/it]\u001b[A\n",
      "  2%|▏         | 122/7000 [1:00:09<61:13:56, 32.05s/it]\u001b[A\n",
      "  2%|▏         | 123/7000 [1:00:42<61:44:13, 32.32s/it]\u001b[A\n",
      "  2%|▏         | 124/7000 [1:01:14<61:21:04, 32.12s/it]\u001b[A\n",
      "  2%|▏         | 125/7000 [1:01:46<61:39:40, 32.29s/it]\u001b[A\n",
      "  2%|▏         | 126/7000 [1:02:19<61:34:50, 32.25s/it]\u001b[A\n",
      "  2%|▏         | 127/7000 [1:02:51<61:41:38, 32.31s/it]\u001b[A\n",
      "  2%|▏         | 128/7000 [1:03:25<62:33:54, 32.78s/it]\u001b[A\n",
      "  2%|▏         | 129/7000 [1:03:59<63:24:59, 33.23s/it]\u001b[A\n",
      "  2%|▏         | 130/7000 [1:04:33<63:31:01, 33.28s/it]\u001b[A\n",
      "  2%|▏         | 131/7000 [1:05:06<63:33:54, 33.31s/it]\u001b[A\n",
      "  2%|▏         | 132/7000 [1:05:38<63:05:27, 33.07s/it]\u001b[A\n",
      "  2%|▏         | 133/7000 [1:06:11<63:01:39, 33.04s/it]\u001b[A\n",
      "  2%|▏         | 134/7000 [1:06:45<63:17:42, 33.19s/it]\u001b[A\n",
      "  2%|▏         | 135/7000 [1:07:18<63:13:47, 33.16s/it]\u001b[A\n",
      "  2%|▏         | 136/7000 [1:07:51<62:57:08, 33.02s/it]\u001b[A\n",
      "  2%|▏         | 137/7000 [1:08:24<62:53:52, 32.99s/it]\u001b[A\n",
      "  2%|▏         | 138/7000 [1:08:57<62:53:57, 33.00s/it]\u001b[A\n",
      "  2%|▏         | 139/7000 [1:09:30<63:14:01, 33.18s/it]\u001b[A\n",
      "  2%|▏         | 140/7000 [1:10:04<63:28:20, 33.31s/it]\u001b[A\n",
      "  2%|▏         | 141/7000 [1:10:37<63:16:34, 33.21s/it]\u001b[A\n",
      "  2%|▏         | 142/7000 [1:11:11<63:33:45, 33.37s/it]\u001b[A\n",
      "  2%|▏         | 143/7000 [1:11:45<63:52:06, 33.53s/it]\u001b[A\n",
      "  2%|▏         | 144/7000 [1:12:19<64:06:09, 33.66s/it]\u001b[A\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  2%|▏         | 145/7000 [1:12:53<64:18:31, 33.77s/it]\u001b[A\n",
      "  2%|▏         | 146/7000 [1:13:26<64:04:53, 33.66s/it]\u001b[A\n",
      "  2%|▏         | 147/7000 [1:13:59<63:27:43, 33.34s/it]\u001b[A\n",
      "  2%|▏         | 148/7000 [1:14:31<63:00:22, 33.10s/it]\u001b[A\n",
      "  2%|▏         | 149/7000 [1:15:04<63:08:24, 33.18s/it]\u001b[A\n",
      "  2%|▏         | 150/7000 [1:15:37<63:00:59, 33.12s/it]\u001b[A\n",
      "  2%|▏         | 151/7000 [1:16:11<63:09:56, 33.20s/it]\u001b[A\n",
      "  2%|▏         | 152/7000 [1:16:45<63:44:44, 33.51s/it]\u001b[A\n",
      "  2%|▏         | 153/7000 [1:17:18<63:39:46, 33.47s/it]\u001b[A\n",
      "  2%|▏         | 154/7000 [1:17:52<63:34:22, 33.43s/it]\u001b[A\n",
      "  2%|▏         | 155/7000 [1:18:26<63:50:13, 33.57s/it]\u001b[A\n",
      "  2%|▏         | 156/7000 [1:19:00<64:14:57, 33.80s/it]\u001b[A\n",
      "  2%|▏         | 157/7000 [1:19:34<64:14:10, 33.79s/it]\u001b[A\n",
      "  2%|▏         | 158/7000 [1:20:07<63:39:15, 33.49s/it]\u001b[A\n",
      "  2%|▏         | 159/7000 [1:20:39<63:10:17, 33.24s/it]\u001b[A\n",
      "  2%|▏         | 160/7000 [1:21:12<62:56:06, 33.12s/it]\u001b[A\n",
      "  2%|▏         | 161/7000 [1:21:45<62:55:30, 33.12s/it]\u001b[A\n",
      "  2%|▏         | 162/7000 [1:22:18<62:40:26, 33.00s/it]\u001b[A\n",
      "  2%|▏         | 163/7000 [1:22:51<62:39:13, 32.99s/it]\u001b[A\n",
      "  2%|▏         | 164/7000 [1:23:23<62:03:59, 32.69s/it]\u001b[A\n",
      "  2%|▏         | 165/7000 [1:23:55<61:42:50, 32.50s/it]\u001b[A\n",
      "  2%|▏         | 166/7000 [1:24:28<61:46:18, 32.54s/it]\u001b[A\n",
      "  2%|▏         | 167/7000 [1:25:01<62:00:42, 32.67s/it]\u001b[A\n",
      "  2%|▏         | 168/7000 [1:25:33<62:00:48, 32.68s/it]\u001b[A\n",
      "  2%|▏         | 169/7000 [1:26:05<61:39:08, 32.49s/it]\u001b[A\n",
      "  2%|▏         | 170/7000 [1:26:37<61:26:15, 32.38s/it]\u001b[A\n",
      "  2%|▏         | 171/7000 [1:27:10<61:24:30, 32.37s/it]\u001b[A\n",
      "  2%|▏         | 172/7000 [1:27:41<60:57:45, 32.14s/it]\u001b[A\n",
      "  2%|▏         | 173/7000 [1:28:14<61:06:26, 32.22s/it]\u001b[A\n",
      "  2%|▏         | 174/7000 [1:28:47<61:29:05, 32.43s/it]\u001b[A\n",
      "  2%|▎         | 175/7000 [1:29:21<62:18:09, 32.86s/it]\u001b[A\n",
      "  3%|▎         | 176/7000 [1:29:54<62:41:36, 33.07s/it]\u001b[A\n",
      "  3%|▎         | 177/7000 [1:30:25<61:33:33, 32.48s/it]\u001b[A\n",
      "  3%|▎         | 178/7000 [1:30:57<61:20:03, 32.37s/it]\u001b[A\n",
      "  3%|▎         | 179/7000 [1:31:30<61:16:18, 32.34s/it]\u001b[A\n",
      "  3%|▎         | 180/7000 [1:32:02<61:28:03, 32.45s/it]\u001b[A\n",
      "  3%|▎         | 181/7000 [1:32:35<61:25:58, 32.43s/it]\u001b[A\n",
      "  3%|▎         | 182/7000 [1:33:08<61:55:55, 32.70s/it]\u001b[A\n",
      "  3%|▎         | 183/7000 [1:33:41<62:13:24, 32.86s/it]\u001b[A\n",
      "  3%|▎         | 184/7000 [1:34:16<63:22:10, 33.47s/it]\u001b[A\n",
      "  3%|▎         | 185/7000 [1:34:52<64:27:17, 34.05s/it]\u001b[A\n",
      "  3%|▎         | 186/7000 [1:35:26<64:27:19, 34.05s/it]\u001b[A\n",
      "  3%|▎         | 187/7000 [1:35:59<64:03:58, 33.85s/it]\u001b[A\n",
      "  3%|▎         | 188/7000 [1:36:33<64:21:05, 34.01s/it]\u001b[A\n",
      "  3%|▎         | 189/7000 [1:37:07<63:57:37, 33.81s/it]\u001b[A\n",
      "  3%|▎         | 190/7000 [1:37:41<64:15:42, 33.97s/it]\u001b[A\n",
      "  3%|▎         | 191/7000 [1:38:15<64:22:30, 34.04s/it]\u001b[A\n",
      "  3%|▎         | 192/7000 [1:38:50<64:56:10, 34.34s/it]\u001b[A\n",
      "  3%|▎         | 193/7000 [1:39:25<64:57:30, 34.35s/it]\u001b[A\n",
      "  3%|▎         | 194/7000 [1:39:58<64:31:30, 34.13s/it]\u001b[A\n",
      "  3%|▎         | 195/7000 [1:40:31<63:56:56, 33.83s/it]\u001b[A\n",
      "  3%|▎         | 196/7000 [1:41:06<64:30:26, 34.13s/it]\u001b[A\n",
      "  3%|▎         | 197/7000 [1:41:40<64:28:33, 34.12s/it]\u001b[A\n",
      "  3%|▎         | 198/7000 [1:42:15<64:56:48, 34.37s/it]\u001b[A\n",
      "  3%|▎         | 199/7000 [1:42:51<65:39:13, 34.75s/it]\u001b[A\n",
      "  3%|▎         | 200/7000 [1:43:23<64:15:57, 34.02s/it]\u001b[A\n",
      "  3%|▎         | 201/7000 [1:43:55<63:01:41, 33.37s/it]\u001b[A\n",
      "  3%|▎         | 202/7000 [1:44:28<62:29:57, 33.10s/it]\u001b[A\n",
      "  3%|▎         | 203/7000 [1:45:00<62:20:06, 33.02s/it]\u001b[A\n",
      "  3%|▎         | 204/7000 [1:45:34<62:23:37, 33.05s/it]\u001b[A\n",
      "  3%|▎         | 205/7000 [1:46:06<62:02:10, 32.87s/it]\u001b[A\n",
      "  3%|▎         | 206/7000 [1:46:38<61:17:47, 32.48s/it]\u001b[A\n",
      "  3%|▎         | 207/7000 [1:47:10<61:12:12, 32.44s/it]\u001b[A\n",
      "  3%|▎         | 208/7000 [1:47:43<61:21:17, 32.52s/it]\u001b[A\n",
      "  3%|▎         | 209/7000 [1:48:15<61:10:28, 32.43s/it]\u001b[A\n",
      "  3%|▎         | 210/7000 [1:48:47<60:49:52, 32.25s/it]\u001b[A\n",
      "  3%|▎         | 211/7000 [1:49:19<60:48:29, 32.24s/it]\u001b[A\n",
      "  3%|▎         | 212/7000 [1:49:50<60:24:21, 32.04s/it]\u001b[A\n",
      "  3%|▎         | 213/7000 [1:50:22<60:18:54, 31.99s/it]\u001b[A\n",
      "  3%|▎         | 214/7000 [1:50:55<60:27:19, 32.07s/it]\u001b[A\n",
      "  3%|▎         | 215/7000 [1:51:29<61:44:39, 32.76s/it]\u001b[A\n",
      "  3%|▎         | 216/7000 [1:52:01<61:06:38, 32.43s/it]\u001b[A\n",
      "  3%|▎         | 217/7000 [1:52:32<60:42:45, 32.22s/it]\u001b[A\n",
      "  3%|▎         | 218/7000 [1:53:05<60:58:55, 32.37s/it]\u001b[A\n",
      "  3%|▎         | 219/7000 [1:53:39<62:02:22, 32.94s/it]\u001b[A\n",
      "  3%|▎         | 220/7000 [1:54:12<61:58:16, 32.91s/it]\u001b[A\n",
      "  3%|▎         | 221/7000 [1:54:46<62:17:41, 33.08s/it]\u001b[A\n",
      "  3%|▎         | 222/7000 [1:55:20<62:53:20, 33.40s/it]\u001b[A\n",
      "  3%|▎         | 223/7000 [1:55:55<63:54:10, 33.95s/it]\u001b[A\n",
      "  3%|▎         | 224/7000 [1:56:28<63:29:09, 33.73s/it]\u001b[A\n",
      "  3%|▎         | 225/7000 [1:57:01<63:10:03, 33.57s/it]\u001b[A\n",
      "  3%|▎         | 226/7000 [1:57:35<62:55:53, 33.44s/it]\u001b[A\n",
      "  3%|▎         | 227/7000 [1:58:09<63:32:41, 33.78s/it]\u001b[A\n",
      "  3%|▎         | 228/7000 [1:58:43<63:46:36, 33.90s/it]\u001b[A\n",
      "  3%|▎         | 229/7000 [1:59:17<63:51:40, 33.95s/it]\u001b[A\n",
      "  3%|▎         | 230/7000 [1:59:50<63:19:52, 33.68s/it]\u001b[A\n",
      "  3%|▎         | 231/7000 [2:00:24<63:08:03, 33.58s/it]\u001b[A\n",
      "  3%|▎         | 232/7000 [2:00:57<63:06:22, 33.57s/it]\u001b[A\n",
      "  3%|▎         | 233/7000 [2:01:31<62:57:08, 33.49s/it]\u001b[A\n",
      "  3%|▎         | 234/7000 [2:02:05<63:27:06, 33.76s/it]\u001b[A\n",
      "  3%|▎         | 235/7000 [2:02:39<63:27:56, 33.77s/it]\u001b[A\n",
      "  3%|▎         | 236/7000 [2:03:11<62:35:37, 33.31s/it]\u001b[A\n",
      "  3%|▎         | 237/7000 [2:03:42<61:29:00, 32.73s/it]\u001b[A\n",
      "  3%|▎         | 238/7000 [2:04:14<60:51:04, 32.40s/it]\u001b[A\n",
      "  3%|▎         | 239/7000 [2:04:47<60:58:27, 32.47s/it]\u001b[A\n",
      "  3%|▎         | 240/7000 [2:05:19<61:07:09, 32.55s/it]\u001b[A\n",
      "  3%|▎         | 241/7000 [2:05:51<60:49:27, 32.40s/it]\u001b[A\n",
      "  3%|▎         | 242/7000 [2:06:24<61:07:15, 32.56s/it]\u001b[A\n",
      "  3%|▎         | 243/7000 [2:06:58<61:32:15, 32.79s/it]\u001b[A\n",
      "  3%|▎         | 244/7000 [2:07:29<60:50:01, 32.42s/it]\u001b[A\n",
      "  4%|▎         | 245/7000 [2:08:01<60:32:10, 32.26s/it]\u001b[A\n",
      "  4%|▎         | 246/7000 [2:08:33<60:15:55, 32.12s/it]\u001b[A\n",
      "  4%|▎         | 247/7000 [2:09:05<60:03:02, 32.01s/it]\u001b[A\n",
      "  4%|▎         | 248/7000 [2:09:38<60:55:36, 32.48s/it]\u001b[A\n",
      "  4%|▎         | 249/7000 [2:10:10<60:45:44, 32.40s/it]\u001b[A\n",
      "  4%|▎         | 250/7000 [2:10:43<60:47:31, 32.42s/it]\u001b[A\n",
      "  4%|▎         | 251/7000 [2:11:16<61:06:14, 32.59s/it]\u001b[A\n",
      "  4%|▎         | 252/7000 [2:11:48<60:59:41, 32.54s/it]\u001b[A\n",
      "  4%|▎         | 253/7000 [2:12:21<60:48:31, 32.45s/it]\u001b[A\n",
      "  4%|▎         | 254/7000 [2:12:53<60:45:25, 32.42s/it]\u001b[A\n",
      "  4%|▎         | 255/7000 [2:13:25<60:16:48, 32.17s/it]\u001b[A\n",
      "  4%|▎         | 256/7000 [2:13:57<60:34:06, 32.33s/it]\u001b[A\n",
      "  4%|▎         | 257/7000 [2:14:30<60:44:03, 32.43s/it]\u001b[A\n",
      "  4%|▎         | 258/7000 [2:15:03<60:50:06, 32.48s/it]\u001b[A\n",
      "  4%|▎         | 259/7000 [2:15:36<61:15:51, 32.72s/it]\u001b[A\n",
      "  4%|▎         | 260/7000 [2:16:08<61:05:04, 32.63s/it]\u001b[A\n",
      "  4%|▎         | 261/7000 [2:16:41<61:24:12, 32.80s/it]\u001b[A\n",
      "  4%|▎         | 262/7000 [2:17:14<61:28:22, 32.84s/it]\u001b[A\n",
      "  4%|▍         | 263/7000 [2:17:46<60:53:49, 32.54s/it]\u001b[A\n",
      "  4%|▍         | 264/7000 [2:18:19<61:17:51, 32.76s/it]\u001b[A\n",
      "  4%|▍         | 265/7000 [2:18:52<61:14:06, 32.73s/it]\u001b[A\n",
      "  4%|▍         | 266/7000 [2:19:26<61:37:37, 32.95s/it]\u001b[A\n",
      "  4%|▍         | 267/7000 [2:19:59<61:42:06, 32.99s/it]\u001b[A\n",
      "  4%|▍         | 268/7000 [2:20:31<61:08:04, 32.69s/it]\u001b[A\n",
      "  4%|▍         | 269/7000 [2:21:05<61:46:36, 33.04s/it]\u001b[A\n",
      "  4%|▍         | 270/7000 [2:21:36<60:58:00, 32.61s/it]\u001b[A\n",
      "  4%|▍         | 271/7000 [2:22:09<60:53:40, 32.58s/it]\u001b[A\n",
      "  4%|▍         | 272/7000 [2:22:41<60:38:01, 32.44s/it]\u001b[A\n",
      "  4%|▍         | 273/7000 [2:23:15<61:46:15, 33.06s/it]\u001b[A\n",
      "  4%|▍         | 274/7000 [2:23:49<62:25:13, 33.41s/it]\u001b[A\n",
      "  4%|▍         | 275/7000 [2:24:24<63:02:04, 33.74s/it]\u001b[A\n",
      "  4%|▍         | 276/7000 [2:24:58<63:20:03, 33.91s/it]\u001b[A\n",
      "  4%|▍         | 277/7000 [2:25:32<63:24:54, 33.96s/it]\u001b[A\n",
      "  4%|▍         | 278/7000 [2:26:08<64:21:28, 34.47s/it]\u001b[A\n",
      "  4%|▍         | 279/7000 [2:26:43<64:28:18, 34.53s/it]\u001b[A\n",
      "  4%|▍         | 280/7000 [2:27:16<63:50:21, 34.20s/it]\u001b[A\n",
      "  4%|▍         | 281/7000 [2:27:50<63:46:46, 34.17s/it]\u001b[A\n",
      "  4%|▍         | 282/7000 [2:28:25<63:58:56, 34.29s/it]\u001b[A\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  4%|▍         | 283/7000 [2:29:00<64:38:14, 34.64s/it]\u001b[A\n",
      "  4%|▍         | 284/7000 [2:29:35<64:40:10, 34.67s/it]\u001b[A\n",
      "  4%|▍         | 285/7000 [2:30:10<64:36:59, 34.64s/it]\u001b[A\n",
      "  4%|▍         | 286/7000 [2:30:45<64:56:25, 34.82s/it]\u001b[A\n",
      "  4%|▍         | 287/7000 [2:31:18<64:08:23, 34.40s/it]\u001b[A\n",
      "  4%|▍         | 288/7000 [2:31:56<66:14:31, 35.53s/it]\u001b[A\n",
      "  4%|▍         | 289/7000 [2:32:36<68:17:06, 36.63s/it]\u001b[A\n",
      "  4%|▍         | 290/7000 [2:33:15<69:42:00, 37.40s/it]\u001b[A\n",
      "  4%|▍         | 291/7000 [2:33:53<70:16:36, 37.71s/it]\u001b[A\n",
      "  4%|▍         | 292/7000 [2:34:31<70:21:44, 37.76s/it]\u001b[A\n",
      "  4%|▍         | 293/7000 [2:35:09<70:26:44, 37.81s/it]\u001b[A\n",
      "  4%|▍         | 294/7000 [2:35:47<70:22:50, 37.78s/it]\u001b[A\n",
      "  4%|▍         | 295/7000 [2:36:26<71:05:06, 38.17s/it]\u001b[A\n",
      "  4%|▍         | 296/7000 [2:37:04<71:06:11, 38.18s/it]\u001b[A\n",
      "  4%|▍         | 297/7000 [2:37:43<71:16:09, 38.28s/it]\u001b[A\n",
      "  4%|▍         | 298/7000 [2:38:21<71:27:55, 38.39s/it]\u001b[A\n",
      "  4%|▍         | 299/7000 [2:38:59<71:01:10, 38.15s/it]\u001b[A\n",
      "  4%|▍         | 300/7000 [2:39:41<73:13:11, 39.34s/it]\u001b[A\n",
      "  4%|▍         | 301/7000 [2:40:19<72:39:41, 39.05s/it]\u001b[A\n",
      "  4%|▍         | 302/7000 [2:40:57<72:07:30, 38.77s/it]\u001b[A\n",
      "  4%|▍         | 303/7000 [2:41:35<71:45:46, 38.58s/it]\u001b[A\n",
      "  4%|▍         | 304/7000 [2:42:16<72:36:09, 39.03s/it]\u001b[A\n",
      "  4%|▍         | 305/7000 [2:42:55<72:33:41, 39.02s/it]\u001b[A\n",
      "  4%|▍         | 306/7000 [2:43:33<72:28:00, 38.97s/it]\u001b[A\n",
      "  4%|▍         | 307/7000 [2:44:12<72:14:51, 38.86s/it]\u001b[A\n",
      "  4%|▍         | 308/7000 [2:44:49<71:24:56, 38.42s/it]\u001b[A\n",
      "  4%|▍         | 309/7000 [2:45:28<71:31:22, 38.48s/it]\u001b[A\n",
      "  4%|▍         | 310/7000 [2:46:06<71:13:16, 38.33s/it]\u001b[A\n",
      "  4%|▍         | 311/7000 [2:46:44<71:05:18, 38.26s/it]\u001b[A\n",
      "  4%|▍         | 312/7000 [2:47:21<70:34:18, 37.99s/it]\u001b[A\n",
      "  4%|▍         | 313/7000 [2:47:59<70:09:01, 37.77s/it]\u001b[A\n",
      "  4%|▍         | 314/7000 [2:48:36<70:06:53, 37.75s/it]\u001b[A\n",
      "  4%|▍         | 315/7000 [2:49:14<70:03:51, 37.73s/it]\u001b[A\n",
      "  5%|▍         | 316/7000 [2:49:51<69:34:12, 37.47s/it]\u001b[A\n",
      "  5%|▍         | 317/7000 [2:50:29<69:36:35, 37.50s/it]\u001b[A\n",
      "  5%|▍         | 318/7000 [2:51:06<69:25:02, 37.40s/it]\u001b[A\n",
      "  5%|▍         | 319/7000 [2:51:44<69:51:55, 37.65s/it]\u001b[A\n",
      "  5%|▍         | 320/7000 [2:52:23<70:22:58, 37.93s/it]\u001b[A\n",
      "  5%|▍         | 321/7000 [2:53:00<70:18:04, 37.89s/it]\u001b[A\n",
      "  5%|▍         | 322/7000 [2:53:39<70:54:29, 38.23s/it]\u001b[A\n",
      "  5%|▍         | 323/7000 [2:54:19<71:37:31, 38.62s/it]\u001b[A\n",
      "  5%|▍         | 324/7000 [2:54:57<71:35:48, 38.61s/it]\u001b[A\n",
      "  5%|▍         | 325/7000 [2:55:36<71:46:13, 38.71s/it]\u001b[A\n",
      "  5%|▍         | 326/7000 [2:56:14<71:21:37, 38.49s/it]\u001b[A\n",
      "  5%|▍         | 327/7000 [2:56:51<70:25:18, 37.99s/it]\u001b[A\n",
      "  5%|▍         | 328/7000 [2:57:29<70:23:55, 37.98s/it]\u001b[A\n",
      "  5%|▍         | 329/7000 [2:58:07<70:29:55, 38.04s/it]\u001b[A\n",
      "  5%|▍         | 330/7000 [2:58:45<70:27:19, 38.03s/it]\u001b[A\n",
      "  5%|▍         | 331/7000 [2:59:24<70:34:16, 38.10s/it]\u001b[A\n",
      "  5%|▍         | 332/7000 [3:00:02<70:46:22, 38.21s/it]\u001b[A\n",
      "  5%|▍         | 333/7000 [3:00:40<70:51:28, 38.26s/it]\u001b[A\n",
      "  5%|▍         | 334/7000 [3:01:19<70:44:15, 38.20s/it]\u001b[A\n",
      "  5%|▍         | 335/7000 [3:01:52<68:05:06, 36.78s/it]\u001b[A\n",
      "  5%|▍         | 336/7000 [3:02:24<65:33:46, 35.42s/it]\u001b[A\n",
      "  5%|▍         | 337/7000 [3:02:56<63:48:15, 34.47s/it]\u001b[A\n",
      "  5%|▍         | 338/7000 [3:03:29<62:56:56, 34.02s/it]\u001b[A\n",
      "  5%|▍         | 339/7000 [3:04:02<62:06:23, 33.57s/it]\u001b[A\n",
      "  5%|▍         | 340/7000 [3:04:35<61:48:38, 33.41s/it]\u001b[A\n",
      "  5%|▍         | 341/7000 [3:05:07<61:12:51, 33.09s/it]\u001b[A\n",
      "  5%|▍         | 342/7000 [3:05:41<61:16:55, 33.14s/it]\u001b[A\n",
      "  5%|▍         | 343/7000 [3:06:14<61:39:42, 33.35s/it]\u001b[A\n",
      "  5%|▍         | 344/7000 [3:06:49<62:21:41, 33.73s/it]\u001b[A\n",
      "  5%|▍         | 345/7000 [3:07:22<62:05:27, 33.59s/it]\u001b[A\n",
      "  5%|▍         | 346/7000 [3:07:56<62:21:07, 33.73s/it]\u001b[A\n",
      "  5%|▍         | 347/7000 [3:08:30<62:13:17, 33.67s/it]\u001b[A\n",
      "  5%|▍         | 348/7000 [3:09:04<62:19:40, 33.73s/it]\u001b[A\n",
      "  5%|▍         | 349/7000 [3:09:37<62:08:58, 33.64s/it]\u001b[A\n",
      "  5%|▌         | 350/7000 [3:10:12<62:55:57, 34.07s/it]\u001b[A\n",
      "  5%|▌         | 351/7000 [3:10:46<62:50:08, 34.02s/it]\u001b[A\n",
      "  5%|▌         | 352/7000 [3:11:20<62:31:30, 33.86s/it]\u001b[A\n",
      "  5%|▌         | 353/7000 [3:11:54<62:35:24, 33.90s/it]\u001b[A\n",
      "  5%|▌         | 354/7000 [3:12:28<62:47:08, 34.01s/it]\u001b[A\n",
      "  5%|▌         | 355/7000 [3:13:02<62:35:34, 33.91s/it]\u001b[A\n",
      "  5%|▌         | 356/7000 [3:13:36<62:50:43, 34.05s/it]\u001b[A\n",
      "  5%|▌         | 357/7000 [3:14:11<63:10:17, 34.23s/it]\u001b[A\n",
      "  5%|▌         | 358/7000 [3:14:44<62:45:59, 34.02s/it]\u001b[A\n",
      "  5%|▌         | 359/7000 [3:15:18<62:30:09, 33.88s/it]\u001b[A\n",
      "  5%|▌         | 360/7000 [3:15:51<61:56:57, 33.59s/it]\u001b[A\n",
      "  5%|▌         | 361/7000 [3:16:23<61:20:29, 33.26s/it]\u001b[A\n",
      "  5%|▌         | 362/7000 [3:16:56<61:23:08, 33.29s/it]\u001b[A\n",
      "  5%|▌         | 363/7000 [3:17:29<60:42:15, 32.93s/it]\u001b[A\n",
      "  5%|▌         | 364/7000 [3:18:02<61:14:38, 33.22s/it]\u001b[A\n",
      "  5%|▌         | 365/7000 [3:18:36<61:09:20, 33.18s/it]\u001b[A\n",
      "  5%|▌         | 366/7000 [3:19:08<60:39:56, 32.92s/it]\u001b[A\n",
      "  5%|▌         | 367/7000 [3:19:40<60:12:44, 32.68s/it]\u001b[A\n",
      "  5%|▌         | 368/7000 [3:20:13<60:11:43, 32.68s/it]\u001b[A\n",
      "  5%|▌         | 369/7000 [3:20:46<60:18:49, 32.74s/it]\u001b[A\n",
      "  5%|▌         | 370/7000 [3:21:19<60:26:12, 32.82s/it]\u001b[A\n",
      "  5%|▌         | 371/7000 [3:21:46<57:33:29, 31.26s/it]\u001b[A\n",
      "  5%|▌         | 372/7000 [3:22:19<58:25:53, 31.74s/it]\u001b[A\n",
      "  5%|▌         | 373/7000 [3:22:52<59:03:51, 32.09s/it]\u001b[A\n",
      "  5%|▌         | 374/7000 [3:23:27<60:31:10, 32.88s/it]\u001b[A\n",
      "  5%|▌         | 375/7000 [3:24:01<61:02:39, 33.17s/it]\u001b[A\n",
      "  5%|▌         | 376/7000 [3:24:33<60:51:16, 33.07s/it]\u001b[A\n",
      "  5%|▌         | 377/7000 [3:25:07<61:14:47, 33.29s/it]\u001b[A\n",
      "  5%|▌         | 378/7000 [3:25:40<60:52:03, 33.09s/it]\u001b[A\n",
      "  5%|▌         | 379/7000 [3:26:13<60:55:49, 33.13s/it]\u001b[A\n",
      "  5%|▌         | 380/7000 [3:26:46<60:51:46, 33.10s/it]\u001b[A\n",
      "  5%|▌         | 381/7000 [3:27:19<60:55:31, 33.14s/it]\u001b[A\n",
      "  5%|▌         | 382/7000 [3:27:53<61:09:11, 33.27s/it]\u001b[A\n",
      "  5%|▌         | 383/7000 [3:28:26<61:10:27, 33.28s/it]\u001b[A\n",
      "  5%|▌         | 384/7000 [3:28:59<60:42:06, 33.03s/it]\u001b[A\n",
      "  6%|▌         | 385/7000 [3:29:33<61:24:16, 33.42s/it]\u001b[A\n",
      "  6%|▌         | 386/7000 [3:30:06<61:14:28, 33.33s/it]\u001b[A\n",
      "  6%|▌         | 387/7000 [3:30:39<60:59:46, 33.21s/it]\u001b[A\n",
      "  6%|▌         | 388/7000 [3:31:14<62:01:46, 33.77s/it]\u001b[A\n",
      "  6%|▌         | 389/7000 [3:31:48<62:16:44, 33.91s/it]\u001b[A\n",
      "  6%|▌         | 390/7000 [3:32:21<61:51:57, 33.69s/it]\u001b[A\n",
      "  6%|▌         | 391/7000 [3:32:55<61:35:54, 33.55s/it]\u001b[A\n",
      "  6%|▌         | 392/7000 [3:33:28<61:40:31, 33.60s/it]\u001b[A\n",
      "  6%|▌         | 393/7000 [3:34:03<61:56:21, 33.75s/it]\u001b[A\n",
      "  6%|▌         | 394/7000 [3:34:36<61:48:37, 33.68s/it]\u001b[A\n",
      "  6%|▌         | 395/7000 [3:35:10<62:13:17, 33.91s/it]\u001b[A\n",
      "  6%|▌         | 396/7000 [3:35:43<61:39:11, 33.61s/it]\u001b[A\n",
      "  6%|▌         | 397/7000 [3:36:16<61:06:55, 33.32s/it]\u001b[A\n",
      "  6%|▌         | 398/7000 [3:36:49<60:57:00, 33.24s/it]\u001b[A\n",
      "  6%|▌         | 399/7000 [3:37:23<61:32:34, 33.56s/it]\u001b[A\n",
      "  6%|▌         | 400/7000 [3:37:55<60:33:58, 33.04s/it]\u001b[A\n",
      "  6%|▌         | 401/7000 [3:38:28<60:16:16, 32.88s/it]\u001b[A\n",
      "  6%|▌         | 402/7000 [3:39:01<60:15:45, 32.88s/it]\u001b[A\n",
      "  6%|▌         | 403/7000 [3:39:33<59:55:53, 32.70s/it]\u001b[A\n",
      "  6%|▌         | 404/7000 [3:40:05<59:28:33, 32.46s/it]\u001b[A\n",
      "  6%|▌         | 405/7000 [3:40:37<59:23:53, 32.42s/it]\u001b[A\n",
      "  6%|▌         | 406/7000 [3:41:09<59:05:46, 32.26s/it]\u001b[A\n",
      "  6%|▌         | 407/7000 [3:41:42<59:16:38, 32.37s/it]\u001b[A\n",
      "  6%|▌         | 408/7000 [3:42:14<59:18:23, 32.39s/it]\u001b[A\n",
      "  6%|▌         | 409/7000 [3:42:47<59:39:48, 32.59s/it]\u001b[A\n",
      "  6%|▌         | 410/7000 [3:43:21<60:06:58, 32.84s/it]\u001b[A\n",
      "  6%|▌         | 411/7000 [3:43:53<60:05:53, 32.84s/it]\u001b[A\n",
      "  6%|▌         | 412/7000 [3:44:26<60:09:51, 32.88s/it]\u001b[A\n",
      "  6%|▌         | 413/7000 [3:45:00<60:29:12, 33.06s/it]\u001b[A\n",
      "  6%|▌         | 414/7000 [3:45:34<61:14:07, 33.47s/it]\u001b[A\n",
      "  6%|▌         | 415/7000 [3:46:08<61:30:04, 33.62s/it]\u001b[A\n",
      "  6%|▌         | 416/7000 [3:46:43<62:16:54, 34.05s/it]\u001b[A\n",
      "  6%|▌         | 417/7000 [3:47:16<61:24:50, 33.59s/it]\u001b[A\n",
      "  6%|▌         | 418/7000 [3:47:49<61:21:53, 33.56s/it]\u001b[A\n",
      "  6%|▌         | 419/7000 [3:48:22<60:49:51, 33.28s/it]\u001b[A\n",
      "  6%|▌         | 420/7000 [3:48:55<60:29:56, 33.10s/it]\u001b[A\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  6%|▌         | 421/7000 [3:49:28<60:25:11, 33.06s/it]\u001b[A\n",
      "  6%|▌         | 422/7000 [3:50:01<60:33:28, 33.14s/it]\u001b[A\n",
      "  6%|▌         | 423/7000 [3:50:34<60:21:28, 33.04s/it]\u001b[A\n",
      "  6%|▌         | 424/7000 [3:51:07<60:19:53, 33.03s/it]\u001b[A\n",
      "  6%|▌         | 425/7000 [3:51:39<59:57:34, 32.83s/it]\u001b[A\n",
      "  6%|▌         | 426/7000 [3:52:12<59:50:52, 32.77s/it]\u001b[A\n",
      "  6%|▌         | 427/7000 [3:52:45<60:06:00, 32.92s/it]\u001b[A\n",
      "  6%|▌         | 428/7000 [3:53:18<60:02:16, 32.89s/it]\u001b[A\n",
      "  6%|▌         | 429/7000 [3:53:50<59:28:01, 32.58s/it]\u001b[A\n",
      "  6%|▌         | 430/7000 [3:54:22<59:33:37, 32.64s/it]\u001b[A\n",
      "  6%|▌         | 431/7000 [3:54:55<59:44:09, 32.74s/it]\u001b[A\n",
      "  6%|▌         | 432/7000 [3:55:28<59:54:37, 32.84s/it]\u001b[A\n",
      "  6%|▌         | 433/7000 [3:56:02<60:07:16, 32.96s/it]\u001b[A\n",
      "  6%|▌         | 434/7000 [3:56:35<60:32:36, 33.19s/it]\u001b[A\n",
      "  6%|▌         | 435/7000 [3:57:07<59:43:59, 32.76s/it]\u001b[A\n",
      "  6%|▌         | 436/7000 [3:57:39<59:02:09, 32.38s/it]\u001b[A\n",
      "  6%|▌         | 437/7000 [3:58:11<58:45:59, 32.24s/it]\u001b[A\n",
      "  6%|▋         | 438/7000 [3:58:43<59:03:11, 32.40s/it]\u001b[A\n",
      "  6%|▋         | 439/7000 [3:59:15<58:50:59, 32.29s/it]\u001b[A\n",
      "  6%|▋         | 440/7000 [3:59:48<59:14:42, 32.51s/it]\u001b[A\n",
      "  6%|▋         | 441/7000 [4:00:23<60:14:52, 33.07s/it]\u001b[A\n",
      "  6%|▋         | 442/7000 [4:00:54<59:12:05, 32.50s/it]\u001b[A\n",
      "  6%|▋         | 443/7000 [4:01:25<58:31:58, 32.14s/it]\u001b[A\n",
      "  6%|▋         | 444/7000 [4:01:57<58:20:39, 32.04s/it]\u001b[A\n",
      "  6%|▋         | 445/7000 [4:02:29<58:29:30, 32.12s/it]\u001b[A\n",
      "  6%|▋         | 446/7000 [4:03:02<58:31:20, 32.15s/it]\u001b[A\n",
      "  6%|▋         | 447/7000 [4:03:35<59:12:36, 32.53s/it]\u001b[A\n",
      "  6%|▋         | 448/7000 [4:04:09<59:53:57, 32.91s/it]\u001b[A\n",
      "  6%|▋         | 449/7000 [4:04:41<59:45:04, 32.84s/it]\u001b[A\n",
      "  6%|▋         | 450/7000 [4:05:14<59:50:19, 32.89s/it]\u001b[A\n",
      "  6%|▋         | 451/7000 [4:05:48<60:05:45, 33.03s/it]\u001b[A\n",
      "  6%|▋         | 452/7000 [4:06:21<60:19:31, 33.17s/it]\u001b[A\n",
      "  6%|▋         | 453/7000 [4:06:54<60:19:19, 33.17s/it]\u001b[A\n",
      "  6%|▋         | 454/7000 [4:07:29<60:47:32, 33.43s/it]\u001b[A\n",
      "  6%|▋         | 455/7000 [4:08:03<61:05:32, 33.60s/it]\u001b[A\n",
      "  7%|▋         | 456/7000 [4:08:35<60:17:52, 33.17s/it]\u001b[A\n",
      "  7%|▋         | 457/7000 [4:09:07<59:54:47, 32.96s/it]\u001b[A\n",
      "  7%|▋         | 458/7000 [4:09:40<59:43:52, 32.87s/it]\u001b[A\n",
      "  7%|▋         | 459/7000 [4:10:13<60:02:23, 33.04s/it]\u001b[A\n",
      "  7%|▋         | 460/7000 [4:10:46<59:45:35, 32.90s/it]\u001b[A\n",
      "  7%|▋         | 461/7000 [4:11:19<59:38:25, 32.83s/it]\u001b[A\n",
      "  7%|▋         | 462/7000 [4:11:52<59:50:51, 32.95s/it]\u001b[A\n",
      "  7%|▋         | 463/7000 [4:12:24<59:21:16, 32.69s/it]\u001b[A\n",
      "  7%|▋         | 464/7000 [4:12:56<59:07:36, 32.57s/it]\u001b[A\n",
      "  7%|▋         | 465/7000 [4:13:29<59:09:41, 32.59s/it]\u001b[A\n",
      "  7%|▋         | 466/7000 [4:14:03<60:15:42, 33.20s/it]\u001b[A\n",
      "  7%|▋         | 467/7000 [4:14:38<61:10:03, 33.71s/it]\u001b[A\n",
      "  7%|▋         | 468/7000 [4:15:12<61:06:27, 33.68s/it]\u001b[A\n",
      "  7%|▋         | 469/7000 [4:15:46<61:05:11, 33.67s/it]\u001b[A\n",
      "  7%|▋         | 470/7000 [4:16:18<60:24:20, 33.30s/it]\u001b[A\n",
      "  7%|▋         | 471/7000 [4:16:51<60:17:30, 33.24s/it]\u001b[A\n",
      "  7%|▋         | 472/7000 [4:17:25<60:32:49, 33.39s/it]\u001b[A\n",
      "  7%|▋         | 473/7000 [4:17:58<60:26:42, 33.34s/it]\u001b[A\n",
      "  7%|▋         | 474/7000 [4:18:31<60:12:37, 33.21s/it]\u001b[A\n",
      "  7%|▋         | 475/7000 [4:19:04<60:04:50, 33.15s/it]\u001b[A\n",
      "  7%|▋         | 476/7000 [4:19:38<60:30:07, 33.39s/it]\u001b[A\n",
      "  7%|▋         | 477/7000 [4:20:11<60:30:28, 33.39s/it]\u001b[A\n",
      "  7%|▋         | 478/7000 [4:20:45<60:44:57, 33.53s/it]\u001b[A\n",
      "  7%|▋         | 479/7000 [4:21:19<60:53:24, 33.62s/it]\u001b[A\n",
      "  7%|▋         | 480/7000 [4:21:52<60:34:28, 33.45s/it]\u001b[A\n",
      "  7%|▋         | 481/7000 [4:22:25<60:17:22, 33.29s/it]\u001b[A\n",
      "  7%|▋         | 482/7000 [4:22:59<60:53:44, 33.63s/it]\u001b[A\n",
      "  7%|▋         | 483/7000 [4:23:32<60:08:54, 33.23s/it]\u001b[A\n",
      "  7%|▋         | 484/7000 [4:24:04<59:43:07, 32.99s/it]\u001b[A\n",
      "  7%|▋         | 485/7000 [4:24:37<59:41:36, 32.98s/it]\u001b[A\n",
      "  7%|▋         | 486/7000 [4:25:10<59:31:02, 32.89s/it]\u001b[A\n",
      "  7%|▋         | 487/7000 [4:25:42<59:23:41, 32.83s/it]\u001b[A\n",
      "  7%|▋         | 488/7000 [4:26:15<59:07:51, 32.69s/it]\u001b[A\n",
      "  7%|▋         | 489/7000 [4:26:48<59:26:16, 32.86s/it]\u001b[A\n",
      "  7%|▋         | 490/7000 [4:27:22<59:55:44, 33.14s/it]\u001b[A\n",
      "  7%|▋         | 491/7000 [4:27:56<60:16:06, 33.33s/it]\u001b[A\n",
      "  7%|▋         | 492/7000 [4:28:29<60:01:57, 33.21s/it]\u001b[A\n",
      "  7%|▋         | 493/7000 [4:29:02<60:19:19, 33.37s/it]\u001b[A\n",
      "  7%|▋         | 494/7000 [4:29:35<60:07:46, 33.27s/it]\u001b[A\n",
      "  7%|▋         | 495/7000 [4:30:07<59:21:24, 32.85s/it]\u001b[A\n",
      "  7%|▋         | 496/7000 [4:30:41<59:41:40, 33.04s/it]\u001b[A\n",
      "  7%|▋         | 497/7000 [4:31:13<59:22:04, 32.87s/it]\u001b[A\n",
      "  7%|▋         | 498/7000 [4:31:46<59:22:02, 32.87s/it]\u001b[A\n",
      "  7%|▋         | 499/7000 [4:32:19<59:08:28, 32.75s/it]\u001b[A\n",
      "  7%|▋         | 500/7000 [4:32:51<59:04:22, 32.72s/it]\u001b[A\n",
      "  7%|▋         | 501/7000 [4:33:24<59:22:27, 32.89s/it]\u001b[A\n",
      "  7%|▋         | 502/7000 [4:33:58<59:56:22, 33.21s/it]\u001b[A\n",
      "  7%|▋         | 503/7000 [4:34:32<59:58:11, 33.23s/it]\u001b[A\n",
      "  7%|▋         | 504/7000 [4:35:04<59:28:40, 32.96s/it]\u001b[A\n",
      "  7%|▋         | 505/7000 [4:35:36<59:05:58, 32.76s/it]\u001b[A\n",
      "  7%|▋         | 506/7000 [4:36:09<59:00:57, 32.72s/it]\u001b[A\n",
      "  7%|▋         | 507/7000 [4:36:42<58:59:47, 32.71s/it]\u001b[A\n",
      "  7%|▋         | 508/7000 [4:37:15<59:20:38, 32.91s/it]\u001b[A\n",
      "  7%|▋         | 509/7000 [4:37:48<59:08:23, 32.80s/it]\u001b[A\n",
      "  7%|▋         | 510/7000 [4:38:21<59:28:57, 32.99s/it]\u001b[A\n",
      "  7%|▋         | 511/7000 [4:38:54<59:21:58, 32.94s/it]\u001b[A\n",
      "  7%|▋         | 512/7000 [4:39:27<59:35:24, 33.06s/it]\u001b[A\n",
      "  7%|▋         | 513/7000 [4:40:03<61:10:42, 33.95s/it]\u001b[A\n",
      "  7%|▋         | 514/7000 [4:40:38<61:40:01, 34.23s/it]\u001b[A\n",
      "  7%|▋         | 515/7000 [4:41:11<61:04:59, 33.91s/it]\u001b[A\n",
      "  7%|▋         | 516/7000 [4:41:46<61:23:20, 34.08s/it]\u001b[A\n",
      "  7%|▋         | 517/7000 [4:42:19<60:57:22, 33.85s/it]\u001b[A\n",
      "  7%|▋         | 518/7000 [4:42:53<61:10:18, 33.97s/it]\u001b[A\n",
      "  7%|▋         | 519/7000 [4:43:26<60:37:56, 33.68s/it]\u001b[A\n",
      "  7%|▋         | 520/7000 [4:43:59<60:15:34, 33.48s/it]\u001b[A\n",
      "  7%|▋         | 521/7000 [4:44:31<59:17:37, 32.95s/it]\u001b[A\n",
      "  7%|▋         | 522/7000 [4:45:04<59:10:06, 32.88s/it]\u001b[A\n",
      "  7%|▋         | 523/7000 [4:45:36<59:01:23, 32.81s/it]\u001b[A\n",
      "  7%|▋         | 524/7000 [4:46:08<58:13:19, 32.37s/it]\u001b[A\n",
      "  8%|▊         | 525/7000 [4:46:40<58:11:03, 32.35s/it]\u001b[A\n",
      "  8%|▊         | 526/7000 [4:47:12<57:49:16, 32.15s/it]\u001b[A\n",
      "  8%|▊         | 527/7000 [4:47:43<57:33:29, 32.01s/it]\u001b[A\n",
      "  8%|▊         | 528/7000 [4:48:16<57:45:04, 32.12s/it]\u001b[A\n",
      "  8%|▊         | 529/7000 [4:48:48<57:36:44, 32.05s/it]\u001b[A\n",
      "  8%|▊         | 530/7000 [4:49:20<57:38:52, 32.08s/it]\u001b[A\n",
      "  8%|▊         | 531/7000 [4:49:52<57:44:10, 32.13s/it]\u001b[A\n",
      "  8%|▊         | 532/7000 [4:50:24<57:46:44, 32.16s/it]\u001b[A\n",
      "  8%|▊         | 533/7000 [4:50:57<57:59:08, 32.28s/it]\u001b[A\n",
      "  8%|▊         | 534/7000 [4:51:29<58:10:33, 32.39s/it]\u001b[A\n",
      "  8%|▊         | 535/7000 [4:52:01<57:58:52, 32.29s/it]\u001b[A\n",
      "  8%|▊         | 536/7000 [4:52:34<58:21:10, 32.50s/it]\u001b[A\n",
      "  8%|▊         | 537/7000 [4:53:07<58:30:40, 32.59s/it]\u001b[A\n",
      "  8%|▊         | 538/7000 [4:53:40<58:40:13, 32.69s/it]\u001b[A\n",
      "  8%|▊         | 539/7000 [4:54:13<58:56:40, 32.84s/it]\u001b[A\n",
      "  8%|▊         | 540/7000 [4:54:47<59:22:11, 33.09s/it]\u001b[A\n",
      "  8%|▊         | 541/7000 [4:55:20<59:26:59, 33.14s/it]\u001b[A\n",
      "  8%|▊         | 542/7000 [4:55:55<60:07:59, 33.52s/it]\u001b[A\n",
      "  8%|▊         | 543/7000 [4:56:28<59:47:52, 33.34s/it]\u001b[A\n",
      "  8%|▊         | 544/7000 [4:57:02<60:17:58, 33.62s/it]\u001b[A\n",
      "  8%|▊         | 545/7000 [4:57:36<60:47:27, 33.90s/it]\u001b[A\n",
      "  8%|▊         | 546/7000 [4:58:10<60:26:10, 33.71s/it]\u001b[A\n",
      "  8%|▊         | 547/7000 [4:58:42<59:44:57, 33.33s/it]\u001b[A\n",
      "  8%|▊         | 548/7000 [4:59:15<59:16:25, 33.07s/it]\u001b[A\n",
      "  8%|▊         | 549/7000 [4:59:48<59:23:56, 33.15s/it]\u001b[A\n",
      "  8%|▊         | 550/7000 [5:00:20<59:00:25, 32.93s/it]\u001b[A\n",
      "  8%|▊         | 551/7000 [5:00:53<58:50:03, 32.84s/it]\u001b[A\n",
      "  8%|▊         | 552/7000 [5:01:25<58:35:36, 32.71s/it]\u001b[A\n",
      "  8%|▊         | 553/7000 [5:01:59<58:58:36, 32.93s/it]\u001b[A\n",
      "  8%|▊         | 554/7000 [5:02:31<58:29:32, 32.67s/it]\u001b[A\n",
      "  8%|▊         | 555/7000 [5:03:04<58:56:26, 32.92s/it]\u001b[A\n",
      "  8%|▊         | 556/7000 [5:03:38<59:20:03, 33.15s/it]\u001b[A\n",
      "  8%|▊         | 557/7000 [5:04:12<59:50:54, 33.44s/it]\u001b[A\n",
      "  8%|▊         | 558/7000 [5:04:46<60:05:52, 33.58s/it]\u001b[A\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  8%|▊         | 559/7000 [5:05:20<60:24:06, 33.76s/it]\u001b[A\n",
      "  8%|▊         | 560/7000 [5:05:55<60:39:48, 33.91s/it]\u001b[A\n",
      "  8%|▊         | 561/7000 [5:06:29<61:02:09, 34.12s/it]\u001b[A\n",
      "  8%|▊         | 562/7000 [5:07:03<60:44:52, 33.97s/it]\u001b[A\n",
      "  8%|▊         | 563/7000 [5:07:35<59:46:41, 33.43s/it]\u001b[A\n",
      "  8%|▊         | 564/7000 [5:08:08<59:35:28, 33.33s/it]\u001b[A\n",
      "  8%|▊         | 565/7000 [5:08:41<59:23:27, 33.23s/it]\u001b[A\n",
      "  8%|▊         | 566/7000 [5:09:14<59:19:59, 33.20s/it]\u001b[A\n",
      "  8%|▊         | 567/7000 [5:09:47<59:04:08, 33.06s/it]\u001b[A\n",
      "  8%|▊         | 568/7000 [5:10:20<59:07:28, 33.09s/it]\u001b[A\n",
      "  8%|▊         | 569/7000 [5:10:52<58:40:30, 32.85s/it]\u001b[A\n",
      "  8%|▊         | 570/7000 [5:11:24<58:07:19, 32.54s/it]\u001b[A\n",
      "  8%|▊         | 571/7000 [5:11:58<58:35:12, 32.81s/it]\u001b[A\n",
      "  8%|▊         | 572/7000 [5:12:31<58:46:48, 32.92s/it]\u001b[A\n",
      "  8%|▊         | 573/7000 [5:13:04<58:42:25, 32.88s/it]\u001b[A\n",
      "  8%|▊         | 574/7000 [5:13:37<58:47:03, 32.93s/it]\u001b[A\n",
      "  8%|▊         | 575/7000 [5:14:10<58:42:45, 32.90s/it]\u001b[A\n",
      "  8%|▊         | 576/7000 [5:14:42<58:33:55, 32.82s/it]\u001b[A\n",
      "  8%|▊         | 577/7000 [5:15:15<58:49:44, 32.97s/it]\u001b[A\n",
      "  8%|▊         | 578/7000 [5:15:49<58:58:47, 33.06s/it]\u001b[A\n",
      "  8%|▊         | 579/7000 [5:16:22<58:59:21, 33.07s/it]\u001b[A\n",
      "  8%|▊         | 580/7000 [5:16:55<58:50:47, 33.00s/it]\u001b[A\n",
      "  8%|▊         | 581/7000 [5:17:27<58:19:29, 32.71s/it]\u001b[A\n",
      "  8%|▊         | 582/7000 [5:18:00<58:30:58, 32.82s/it]\u001b[A\n",
      "  8%|▊         | 583/7000 [5:18:32<57:55:38, 32.50s/it]\u001b[A\n",
      "  8%|▊         | 584/7000 [5:19:05<58:34:10, 32.86s/it]\u001b[A\n",
      "  8%|▊         | 585/7000 [5:19:38<58:20:18, 32.74s/it]\u001b[A\n",
      "  8%|▊         | 586/7000 [5:20:11<58:38:33, 32.91s/it]\u001b[A\n",
      "  8%|▊         | 587/7000 [5:20:43<58:05:48, 32.61s/it]\u001b[A\n",
      "  8%|▊         | 588/7000 [5:21:16<58:17:16, 32.73s/it]\u001b[A\n",
      "  8%|▊         | 589/7000 [5:21:49<58:24:44, 32.80s/it]\u001b[A\n",
      "  8%|▊         | 590/7000 [5:22:22<58:41:37, 32.96s/it]\u001b[A\n",
      "  8%|▊         | 591/7000 [5:22:55<58:32:54, 32.89s/it]\u001b[A\n",
      "  8%|▊         | 592/7000 [5:23:28<58:51:45, 33.07s/it]\u001b[A\n",
      "  8%|▊         | 593/7000 [5:24:01<58:42:01, 32.98s/it]\u001b[A\n",
      "  8%|▊         | 594/7000 [5:24:35<59:13:01, 33.28s/it]\u001b[A\n",
      "  8%|▊         | 595/7000 [5:25:08<58:57:38, 33.14s/it]\u001b[A\n",
      "  9%|▊         | 596/7000 [5:25:40<58:32:28, 32.91s/it]\u001b[A\n",
      "  9%|▊         | 597/7000 [5:26:13<58:24:44, 32.84s/it]\u001b[A\n",
      "  9%|▊         | 598/7000 [5:26:46<58:28:45, 32.88s/it]\u001b[A\n",
      "  9%|▊         | 599/7000 [5:27:18<58:08:24, 32.70s/it]\u001b[A\n",
      "  9%|▊         | 600/7000 [5:27:52<58:41:50, 33.02s/it]\u001b[A\n",
      "  9%|▊         | 601/7000 [5:28:24<58:11:10, 32.73s/it]\u001b[A\n",
      "  9%|▊         | 602/7000 [5:28:58<58:36:33, 32.98s/it]\u001b[A\n",
      "  9%|▊         | 603/7000 [5:29:31<58:37:49, 33.00s/it]\u001b[A\n",
      "  9%|▊         | 604/7000 [5:30:05<59:11:30, 33.32s/it]\u001b[A\n",
      "  9%|▊         | 605/7000 [5:30:37<58:26:53, 32.90s/it]\u001b[A\n",
      "  9%|▊         | 606/7000 [5:31:10<58:24:55, 32.89s/it]\u001b[A\n",
      "  9%|▊         | 607/7000 [5:31:42<58:07:06, 32.73s/it]\u001b[A\n",
      "  9%|▊         | 608/7000 [5:32:15<58:09:13, 32.75s/it]\u001b[A\n",
      "  9%|▊         | 609/7000 [5:32:48<58:25:42, 32.91s/it]\u001b[A\n",
      "  9%|▊         | 610/7000 [5:33:20<58:00:36, 32.68s/it]\u001b[A\n",
      "  9%|▊         | 611/7000 [5:33:53<57:52:14, 32.61s/it]\u001b[A\n",
      "  9%|▊         | 612/7000 [5:34:25<57:59:17, 32.68s/it]\u001b[A\n",
      "  9%|▉         | 613/7000 [5:34:58<57:41:23, 32.52s/it]\u001b[A\n",
      "  9%|▉         | 614/7000 [5:35:30<57:37:07, 32.48s/it]\u001b[A\n",
      "  9%|▉         | 615/7000 [5:36:03<57:41:55, 32.53s/it]\u001b[A\n",
      "  9%|▉         | 616/7000 [5:36:36<57:52:11, 32.63s/it]\u001b[A\n",
      "  9%|▉         | 617/7000 [5:37:08<57:36:46, 32.49s/it]\u001b[A\n",
      "  9%|▉         | 618/7000 [5:37:39<57:08:57, 32.24s/it]\u001b[A\n",
      "  9%|▉         | 619/7000 [5:38:11<57:05:30, 32.21s/it]\u001b[A\n",
      "  9%|▉         | 620/7000 [5:38:44<57:07:56, 32.24s/it]\u001b[A\n",
      "  9%|▉         | 621/7000 [5:39:17<57:26:26, 32.42s/it]\u001b[A\n",
      "  9%|▉         | 622/7000 [5:39:50<58:10:15, 32.83s/it]\u001b[A\n",
      "  9%|▉         | 623/7000 [5:40:23<57:49:55, 32.65s/it]\u001b[A\n",
      "  9%|▉         | 624/7000 [5:40:55<57:27:16, 32.44s/it]\u001b[A\n",
      "  9%|▉         | 625/7000 [5:41:26<57:04:06, 32.23s/it]\u001b[A\n",
      "  9%|▉         | 626/7000 [5:41:58<56:53:15, 32.13s/it]\u001b[A\n",
      "  9%|▉         | 627/7000 [5:42:30<56:53:54, 32.14s/it]\u001b[A\n",
      "  9%|▉         | 628/7000 [5:43:05<58:11:43, 32.88s/it]\u001b[A\n",
      "  9%|▉         | 629/7000 [5:43:39<58:34:26, 33.10s/it]\u001b[A\n",
      "  9%|▉         | 630/7000 [5:44:11<58:13:48, 32.91s/it]\u001b[A\n",
      "  9%|▉         | 631/7000 [5:44:44<58:23:27, 33.00s/it]\u001b[A\n",
      "  9%|▉         | 632/7000 [5:45:17<57:58:55, 32.78s/it]\u001b[A\n",
      "  9%|▉         | 633/7000 [5:45:49<57:54:03, 32.74s/it]\u001b[A\n",
      "  9%|▉         | 634/7000 [5:46:21<57:37:18, 32.59s/it]\u001b[A\n",
      "  9%|▉         | 635/7000 [5:46:55<58:02:18, 32.83s/it]\u001b[A\n",
      "  9%|▉         | 636/7000 [5:47:29<58:56:53, 33.35s/it]\u001b[A\n",
      "  9%|▉         | 637/7000 [5:48:02<58:32:55, 33.13s/it]\u001b[A\n",
      "  9%|▉         | 638/7000 [5:48:35<58:30:07, 33.10s/it]\u001b[A\n",
      "  9%|▉         | 639/7000 [5:49:08<58:41:14, 33.21s/it]\u001b[A\n",
      "  9%|▉         | 640/7000 [5:49:42<58:59:50, 33.39s/it]\u001b[A\n",
      "  9%|▉         | 641/7000 [5:50:16<59:16:59, 33.56s/it]\u001b[A\n",
      "  9%|▉         | 642/7000 [5:50:49<58:49:19, 33.31s/it]\u001b[A\n",
      "  9%|▉         | 643/7000 [5:51:22<58:53:03, 33.35s/it]\u001b[A\n",
      "  9%|▉         | 644/7000 [5:51:55<58:29:59, 33.13s/it]\u001b[A\n",
      "  9%|▉         | 645/7000 [5:52:28<58:22:03, 33.06s/it]\u001b[A\n",
      "  9%|▉         | 646/7000 [5:53:01<58:30:06, 33.15s/it]\u001b[A\n",
      "  9%|▉         | 647/7000 [5:53:35<59:02:41, 33.46s/it]\u001b[A\n",
      "  9%|▉         | 648/7000 [5:54:10<59:24:30, 33.67s/it]\u001b[A\n",
      "  9%|▉         | 649/7000 [5:54:43<59:24:00, 33.67s/it]\u001b[A\n",
      "  9%|▉         | 650/7000 [5:55:17<59:09:59, 33.54s/it]\u001b[A\n",
      "  9%|▉         | 651/7000 [5:55:50<59:01:35, 33.47s/it]\u001b[A\n",
      "  9%|▉         | 652/7000 [5:56:22<58:24:38, 33.13s/it]\u001b[A\n",
      "  9%|▉         | 653/7000 [5:56:55<58:09:05, 32.98s/it]\u001b[A\n",
      "  9%|▉         | 654/7000 [5:57:27<57:58:16, 32.89s/it]\u001b[A\n",
      "  9%|▉         | 655/7000 [5:58:01<58:27:17, 33.17s/it]\u001b[A\n",
      "  9%|▉         | 656/7000 [5:58:33<57:35:33, 32.68s/it]\u001b[A\n",
      "  9%|▉         | 657/7000 [5:59:06<57:38:30, 32.71s/it]\u001b[A"
     ]
    }
   ],
   "source": [
    "start = time.time()\n",
    "\n",
    "get_data_by_dir(\"data/train\",\"data/hy_round1_train_20200102\",\"data/train_merge_result.csv\")\n",
    "# with ThreadPoolExecutor(max_workers=10) as t: \n",
    "#     f1 = t.submit(get_data_by_dir,\"data/train\")\n",
    "    \n",
    "end = time.time()\n",
    "print(str(end-start))  #841.635686"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "start = time.time()\n",
    "\n",
    "get_data_by_dir(\"data/test\",\"hy_round1_testA_20200102\",\"data/test_merge_result.csv\")\n",
    "# with ThreadPoolExecutor(max_workers=10) as t: \n",
    "#     f1 = t.submit(get_data_by_dir,\"data/test/数据清洗\",True)\n",
    "\n",
    "end = time.time()\n",
    "print(str(end-start))  #841.635686"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
